Observable은 Observer에 Event를 전달한다.
Observer은 Observable을 구독하고 전달되는 Event를 처리한다.
Observable은 다른 Observable을 구독하지 못한다.
Observer는 다른 Observer로 Event를 전달하지 못한다.
반면 Subject는 다른 Observable에서 Event를 받아서 구독자로 전달할 수 있다.
Subject는 Observable인 동시에 Observer이다.
RxSwift는 4가지 Subject를 제공한다.
PublishSubject
BehaviorSubject
ReplaySubject
AsyncSubject
PublishSubject: 가장 기본적인 Subject, Subject로 전달되는 새로운 Event를 구독자로 전달한다
BehaviorSubject: 생성 시점에 시작 Event를 지정하고, Subject로 전달되는 최신Event를 저장해두었다가 새로운 구독자에게 최신Event를 전달한다.
ReplaySubject: 하나 이상의 최신 Event를 버퍼에 저장한다. Observer가 구독을 시작하면 버퍼에 있는 모든 Event를 전달한다.
AsyncSubject: Subject로 CompletedEvent가 전달되는 시점에 마지막으로 전달된 NextEvent를 구독자에게 전달한다.
RxSwift는 Subject를 rapping하고있는 2가지 Relay를 제공한다.
PublishRelay
BehaviorRelay
이전 버전에서 제공하던 Variable이 Relay로 대체되었다.
PublishRelay: PublishSubject를 rapping한것이다
BehaviorRelay: BehaviorSubject를 rapping한것이다.
Relay는 일반적인 Subject와 달리 NextEvent만 받고 나머지 Completed와 Error Event는 받지 않는다.
주로 종료 없이 계속 반복되는 이벤트 시퀀스를 처리할 때 사용한다.