안녕하세요, iOS 개발하는 루피입니다!
Basics
Observer 패턴과 시퀀스
RxSwift를 이해하는 데 있어 가장 중요한 개념 중 하나는 Observer 패턴과 일반적인 시퀀스의 유사성입니다.
- 시퀀스: 순서대로 요소에 접근할 수 있는 프로토콜. 즉, 시퀀스는 요소를 순차적이고 반복적으로 접근할 수 있게 해주는 타입입니다.
- Observable: RxSwift에서 Observable은 시퀀스와 비슷하지만, 비동기적으로 요소를 수신할 수 있습니다.RxSwift의 핵심입니다.
Observable과 Sequence의 차이점
- Observable: 비동기적으로 요소를 수신할 수 있는 시퀀스입니다.
- Swift의 Sequence: 동기적이며 순차적으로 요소를 제공하는 시퀀스입니다.
Observable과 Sequence의 비교
- ObservableType.subscribe 메서드: Observable의 구독을 시작합니다.
- Sequence.makeIterator 메서드: 시퀀스의 이터레이터를 만듭니다.
Observer는 시퀀스의 요소를 직접 받기보다는 ObservableType.subscribe 메서드를 통해 요소를 수신합니다. 시퀀스는 시각화하기 쉬운 간단하고 친숙한 개념입니다.
비동기 시스템 모델링
Rx를 사용하지 않고 비동기 시스템을 모델링하면 상태 기계와 일시적인 상태로 가득 차게 됩니다. Rx는 이러한 복잡성을 해결해 주는 도구입니다.
시퀀스의 종류
- 유한 시퀀스: 예를 들어, 숫자의 시퀀스:
1 - - 2 - - 3 - - 4 - - 5 - - 6 - -| (정상적으로 종료됨)
- - a - - b - - a - - a - - - d - - - X (에러와 함께 종료됨) - 무한 시퀀스: 예를 들어, 버튼 클릭의 시퀀스:
--tap-tap-------tap--→
시퀀스의 상태
- next: 시퀀스의 다음 요소를 나타냅니다.
- error: 시퀀스가 오류와 함께 종료됨을 나타냅니다.
- completed: 시퀀스가 정상적으로 종료됨을 나타냅니다.
Event와 Observable
enum Event<Element> {
case next(Element) // 시퀀스의 다음 요소
case error(Swift.Error) // 시퀀스가 오류로 실패
case completed // 시퀀스가 성공적으로 종료
}
class Observable<Element> {
func subscribe(_ observer: Observer<Element>) -> Disposable
}
protocol ObserverType {
func on(_ event: Event<Element>)
}
시퀀스가 completed 또는 error 이벤트를 전송하면, 시퀀스의 모든 내부 리소스가 해제됩니다.
Dispose와 메모리 관리
- dispose: 구독을 해제하고 리소스를 정리하는 데 사용됩니다. subscribe에서 반환된 객체를 사용하여 호출합니다.
- DisposeBag: 여러 구독을 한 번에 관리할 수 있는 도구입니다.
dispose를 호출하거나 사용하지 않으면 메모리 누수가 발생할 수 있으며, 시퀀스가 완료될 때까지 리소스가 계속 사용될 수 있습니다. dispose 또는 DisposeBag을 사용하여 메모리를 효과적으로 관리하는 것이 중요합니다.
이해가 되셨나요? 차근차근 공부해 나가면 RxSwift가 점점 더 명확해질 것입니다. 계속해서 흥미로운 내용을 함께 알아가 봐요!
이처럼 공식문서를 바탕으로 기본적인 내용들을 번역하고 정리해 보았습니다. 피드백은 언제든지 환영입니다!!
RxSwift/Documentation/GettingStarted.md at main · ReactiveX/RxSwift
RxSwift/Documentation/GettingStarted.md at main · ReactiveX/RxSwift
Reactive Programming in Swift. Contribute to ReactiveX/RxSwift development by creating an account on GitHub.
github.com
'iOS > RxSwift' 카테고리의 다른 글
| [RxSwift] 3. Operators (0) | 2024.12.20 |
|---|---|
| [RxSwift] 2. Disposing (0) | 2024.12.20 |
| [RxSwift] From / Just / Of / Repeat / Interval / Timer / Range (0) | 2024.12.20 |
| [RxSwift] Empty / Never / Throw (0) | 2024.12.20 |
| [RxSwift] Create / Defer (1) | 2024.12.20 |