Subject
Subject는 Observable이자, Observer이다. 따라서, 하나 이상의 Observable을 Subscribe 할 수 있고, 동시에 Observable이기 때문에 item을 Emit할 수 있다.
🔥 Hot Observable : 구독 여부와 상관없이 이벤트를 Emit -> 구독하는 시점에 따라 방출되는 결과가 다르다.
❄️ Cold Observable : 구독 되어야만 이벤트를 Emit -> 어느 시점에 구독하든 같은 결과를 얻는다.
✅ Multicast
Hot Observable = Subject = Multicast
하나의 Observable 실행이 여러 subscribe를 공유한다.
위의 출력 결과처럼, Subject는 Multicast이기 때문에 모두 동일한 출력 결과를 얻는다.
✅ Unicast
Cold Observable = Observable = Unicast
Subscribe한 Observer가 몇개던 독자적인 실행을 갖는다.
위의 출력 결과처럼, Observable은 Unicast이기 때문에 독자적인 결과를 얻는다.
PublishSubject
BehaviorSubject
ReplaySubject
AsyncSubject
Relay
Relay는 Subject와 다르게 Next 이벤트만 받고 Completed와 error는 받지 않는다.
즉, 종료되지 않음을 의미하고 이는 종료 없이 지속되는 UI 이벤트를 처리할 때 사용한다.
1. Completed, Error는 전달하지 않는다.
2. Dispose 되기 전까지 종료되지 않는다.
3. RxCocoa에서 지원한다.
4. Relay는 Subject를 Wrapping 했기 때문에, 주된 동작 방식은 동일하다.
5. Subject에서는 onNext를 통해 전달하지만, Relay에서는 accept 메소드를 사용한다.
PublishRelay
BehaviorRelay
ReplayRelay
Driver
UI 동작은 MainThred에서만 작동하고, Error 발생 시 Stream이 끊기는 것을 방지해야한다.
기존 Observable을 Bind하여 사이드이펙트를 처리하려면 메인스케줄러로 처리했어야했다.
이는 번거로움 + Error 발생 시 해당 Stream은 사용불가능 -> UI는 더이상 동작하지 않음을 의미한다.
그래서 등장한 것이 Driver이다.
Driver는 bind가 아닌 drive로 처리한다.
'iOS > RxSwift' 카테고리의 다른 글
[RxSwift] UILabel의 탭 이벤트를 감지해보자. (2) | 2024.05.07 |
---|---|
[RxSwift] RxSwift와 RxCocoa로 Toggle Button 구현하기 (0) | 2024.05.02 |
[iOS/RxSwift] RxSwift 완벽 정리 - 1 (1) | 2024.03.07 |
[iOS/RxSwift] Next, Error, Completed 처리하기 (0) | 2024.02.03 |
[iOS/RxSwift] Subject가 무엇일까? (0) | 2024.02.03 |