[RxSwift] Subject

RudinP·2025년 9월 15일
0

Study

목록 보기
353/363
  • observable은 다른 이벤트를 구독하지 못함

  • observer는 다른 observer로 이벤트 전달 불가

  • 반면, subject는 가능

    subject는 observable인 동시에 observer

  • RxSwift는 PublishSubject, BehaviorSubject, ReplaySubject, AsyncSubject 4가지를 제공

PublishSubject

  • 구독 이후에 전달되는 새로운 이벤트만 구독자에게 전달
  • 구독자가 구독하기 전 next이벤트는 전달되지 않는다.
    • 전달되어야한다면 ReplaySubject 혹은 holdObservable 사용
  • 이미 completed된 이벤트는 이후 구독된 구독자에게도 completed로 전달된다.
  • error 이벤트도 동일하다.
  • 이벤트가 전달되면 즉시 구독자에게 전달된다.

BehaviorSubject

  • 가장 최근의 next이벤트를 저장했다가 새로운 구독자로 전달한다.
    • 최신 이벤트를 제외하고 나머지 이벤트는 모두 사라진다.
  • Subject를 생성하는 방식에서 PublishSubject와 차이가 있다.
    • 생성시 하나의 값을 전달한다.
    • 이 값은 바로 전달된다.

ReplaySubejct

  • 두 개 이상의 이벤트를 저장하고 새로운 구독자에게 전달한다.
  • 지정된 버퍼 크기만큼의 최신 이벤트를 저장하고 새로운 구독자에게 전달한다.
    • 버퍼는 메모리를 사용하므로 메모리 사용량에 신경써야 한다.
  • 종료 여부에 관계없이 항상 버퍼의 이벤트를 새로운 구독자에게 전달한다.

AsyncSubject

  • Subject로 completed이벤트가 전달되기 전까지 어떤 이벤트도 구독자로 전달하지 않는다.
  • completed이벤트 발생시 그 시점의 최근에 전달된 이벤트를 구독자에게 전달.
  • 만약 completed이벤트 발생시 최근 전달 이벤트가 없다면 completed만 전달
  • error가 전달되었을 경우 next이벤트가 전달되지 않고 error이벤트만 전달되고 종료된다.

profile
iOS 개발자가 되기 위한 스터디룸...

0개의 댓글