[iOS] Combine과 RxSwift 비교하기

someng·2023년 1월 11일
1

iOS

목록 보기
28/33

📌 Publisher과 Observable

Combine의 Publisher = Rx의 Observable
Combine의 Subscriber = Rx의 Observer

그러나, Publisher는 프로토콜이고 AnyPublisherPublisher을 따르는 struct이다.
Subscriber는 프로토콜이고 AnySubscriberSubscriber를 따르는 struct이다.

따라서 ObservableAnyPublisher와 같고 ObserverAnySubscriber와 같다고 말하는 것이 정확하다.

ObservablePublisher의 차이가 있다면, Publisher는 만들 때 데이터 타입 뿐 만 아니라 에러 타입까지 지정해주어야한다는 것이다.

📌 Subscriber

: Publisher에게 데이터를 요청함

Combine의 assign ≓ Rx의 bind
Combine의 sink ≓ Rx의 subscribe

📌 Subject

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와 BehaviorSubject의 차이점

  • CurrentValueSubject : subscriber가 구독한 시점에 초기값을 준다.
  • BehaviorSubject :subscriber가 구독한 시점에 초기값 또는 최신값(초기값 이후 발행된 값이 있다면)을 준다.

📌 AnyCancellable과 DisposeBag

: 구독을 처분, 취소하는 역할

Combine의 AnyCancellable

  • 명시적으로 처분하지 않더라도, AnyCancellable을 소유하고 있는 객체가 소멸할 경우, 처분이 된다.
  • AnyCancellable에 의해서만 관리되기 때문에 구독 결과를 저장하지 않을 경우 동작하지 않게 된다.
    (RxSwift는 subscribe 결과를 저장하지 않더라도 동작함)

RxSwift의 Disposable

  • subscribe 함수 내에서 observer에 의해 retain 되고 있다.
    → 구독(subscribe) 이후 명시적으로 처분(dispose) 하지 않는다면, Disposablecomplete, error가 발생하기 전까지 살아있게 된다.
profile
👩🏻‍💻 iOS Developer

0개의 댓글