[iOS] Relay 와 Subject의 차이점

kimdocs...📄·2023년 5월 5일
0

iOS

목록 보기
12/22
post-thumbnail

공통점

두 개념 모두 Observable과 Observer 사이의 중개자 역할을 하며, 이벤트를 전달할 수 있다.

차이점

Error and Completion 이벤트 처리

  • Subject는 onError 및 onCompleted 이벤트를 받아들일 수 있으며, 이러한 이벤트가 발생하면 Subject는 종료됨.
  • Relay는 오직 onNext 이벤트만 받아들이고 onError 및 onCompleted 이벤트를 받아들이지 않 따라서 Relay는 종료되지 않고 계속 실행됨

구독자에 대한 안전성

  • Relay는 구독자에게 전달되는 이벤트를 제한하므로 구독자에 대한 안전성이 높아짐! Relay가 오직 onNext 이벤트만 받아들이기 때문에 구독자는 예기치 않은 종료 이벤트를 받지 않음
  • 반면에 Subject는 구독자에게 모든 종류의 이벤트를 전달할 수 있으므로 구독자에 대한 안전성이 상대적으로 낮음

RxCocoa와의 연관성?

  • Relay는 RxCocoa에서 사용되는 클래스로, UIKit 및 AppKit과 같은 UI 프레임워크와 결합된 RxSwift의 확장이므로 Relay는 UI 작업과 관련된 작업에 적합
  • 반면에 Subject는 순수한 RxSwift의 일부로, 모든 종류의 작업에 사용할 수 있음

PublishRelay와 BehaviorRelay

  • PublishRelay: PublishSubject와 유사하게 작동하며, 구독 이후에 발생하는 이벤트만 전달
  • BehaviorRelay: BehaviorSubject와 유사하게 작동하며, 구독 시점에 가장 최근의 이벤트를 전달하고 그 이후에 발생하는 이벤트도 전달

요약하면, Subject와 Relay 모두 이벤트를 전달하는 데 사용되지만, Relay는 오직 onNext 이벤트만 전달하며, 구독자에 대한 안전성이 높다. 따라서 UI 작업과 관련된 작업에 Relay를 사용하고, 일반적인 작업에는 Subject를 사용할 수 있다.

profile
👩‍🌾 GitHub: ezidayzi / 📂 Contact: ezidayzi@gmail.com

0개의 댓글