Combine의
Publisher
= Rx의Observable
Combine의Subscriber
= Rx의Observer
그러나, Publisher
는 프로토콜이고 AnyPublisher
는 Publisher
을 따르는 struct이다.
Subscriber
는 프로토콜이고 AnySubscriber
는 Subscriber
를 따르는 struct이다.
따라서 Observable
은 AnyPublisher
와 같고 Observer
는 AnySubscriber
와 같다고 말하는 것이 정확하다.
Observable
과 Publisher
의 차이가 있다면, Publisher
는 만들 때 데이터 타입 뿐 만 아니라 에러 타입까지 지정해주어야한다는 것이다.
: Publisher
에게 데이터를 요청함
Combine의
assign
≓ Rx의bind
Combine의sink
≓ Rx의subscribe
Combine의 Subject
- Publisher와 Subscriber 모두로 동작한다.
- 구독자들에게 value, error, finished를 준다.
PassthroughSubject
(initial value 없음) /CurrentValueSubject
(initial value있음)Rx의 Subject
- Observable 과 Observer 모두로 동작한다
- 구독자들에게 value, error, completed 를 준다
PublishSubject
(initial value 없음) /BehaviorSubject
(initial value있음)
CurrentValueSubject
: subscriber가 구독한 시점에 초기값을 준다.BehaviorSubject
:subscriber가 구독한 시점에 초기값 또는 최신값(초기값 이후 발행된 값이 있다면)을 준다.: 구독을 처분, 취소하는 역할
Combine의 AnyCancellable
- 명시적으로 처분하지 않더라도,
AnyCancellable
을 소유하고 있는 객체가 소멸할 경우, 처분이 된다.AnyCancellable
에 의해서만 관리되기 때문에 구독 결과를 저장하지 않을 경우 동작하지 않게 된다.
(RxSwift
는 subscribe 결과를 저장하지 않더라도 동작함)RxSwift의 Disposable
subscribe
함수 내에서observer
에 의해 retain 되고 있다.
→ 구독(subscribe) 이후 명시적으로 처분(dispose) 하지 않는다면,Disposable
은 complete, error가 발생하기 전까지 살아있게 된다.