Subject란 Observer
이면서 동시에 Observable
인 녀석을 의미한다.
즉 옵저버블을 구독할 수도 있고, 이벤트를 방출할 수도 있다.
AysncSubject는 소스 옵저버블
로 부터 받은 마지막 값만 방출한다.
소스 옵저버블이 아무 값도 방출하지 않으면 AysncSubject도 아무 값도 방출하지 않는다.
오류로 인해 종료될 경우 아무런 값도 방출하지 않고 종료된다.
BehaviorSubject는 시작 값을 가진다. 아무도 구독하지 않았다면 시작 값을, 구독하는 옵저버가 있다면 가장 마지막 값을 방출한 뒤에 이벤트를 방출한다.
만약, 소스 Observable이 오류 때문에 종료되면 BehaviorSubject는 아무런 항목도 배출하지 않고 소스 Observable에서 발생한 오류를 그대로 전달한다.
PublishSubject는 구독 이후에 소스 옵저버블이 방출한 값만 방출한다.
이 때 만들어지고 나서 바로 이벤트를 방출하기 때문에 모든 이벤트를 전달받는 것을 보장받으려면 명시적으로 Cold Observable을 생성하거나 ReplaySubject를 사용해야한다.
마찬가지로 오류가 발생하면 아무 값도 방출하지 않고 종료한다.
구독 시점에 관계 없이 소스 옵저버블이 방출한 모든 값을 방출한다.
ReplaySubject는 몇개의 오버로드 생성자를 제공한다. 이는 버퍼의 크기가 커지거나 일정 시간이 지나면 오래된 항목을 삭제하기 위함이다.