RxSwift) Subjects

hansangjin96·2021년 3월 4일
0

RxSwift 기초

목록 보기
5/14

Subject란?

SubjectObserver이면서 동시에 Observable인 녀석을 의미한다.
즉 옵저버블을 구독할 수도 있고, 이벤트를 방출할 수도 있다.

종류별 subjects

AsyncSubject

AysncSubject는 소스 옵저버블로 부터 받은 마지막 값만 방출한다.
소스 옵저버블이 아무 값도 방출하지 않으면 AysncSubject도 아무 값도 방출하지 않는다.

오류로 인해 종료될 경우 아무런 값도 방출하지 않고 종료된다.

BehaviorSubject

BehaviorSubject는 시작 값을 가진다. 아무도 구독하지 않았다면 시작 값을, 구독하는 옵저버가 있다면 가장 마지막 값을 방출한 뒤에 이벤트를 방출한다.

만약, 소스 Observable이 오류 때문에 종료되면 BehaviorSubject는 아무런 항목도 배출하지 않고 소스 Observable에서 발생한 오류를 그대로 전달한다.

PublishSubject

PublishSubject는 구독 이후에 소스 옵저버블이 방출한 값만 방출한다.

이 때 만들어지고 나서 바로 이벤트를 방출하기 때문에 모든 이벤트를 전달받는 것을 보장받으려면 명시적으로 Cold Observable을 생성하거나 ReplaySubject를 사용해야한다.

마찬가지로 오류가 발생하면 아무 값도 방출하지 않고 종료한다.

ReplaySubject

구독 시점에 관계 없이 소스 옵저버블이 방출한 모든 값을 방출한다.

ReplaySubject는 몇개의 오버로드 생성자를 제공한다. 이는 버퍼의 크기가 커지거나 일정 시간이 지나면 오래된 항목을 삭제하기 위함이다.

profile
iOS Developer

0개의 댓글