-
[RxJava] 2. Subject / 생산자Programming/RxJava 2020. 9. 2. 15:27Subject
- Subject는 Observable과 Observer를 모두 구현한 추상 타입으로 하나의 소스로부터 다중의 구독자에게 멀티캐스팅이 가능하다.
- Subject는 Observer를 구현하므로 onNext(), onError(), onComplete() 등 메소르르 수동으로 호출하여 이벤트를 구독자들에게 전달할 수 있다.
- Observable 이면서 Observable이다. 발행과 구독을 모두 Subject 객체를 통해 한다.
* Observable과 Observer의 성격을 둘다 가지고 있는 클래스
* Observable이 가지고 있는 subscribe와 여러 operator를 사용 할 수 있음
* Observer가 가지고 있는 onNext, onError, onComplete를 사용 할 수 있음
* subscribe 했을 때 데이터를 넘겨주는 방식에 따라 Publish, Behavior, Replay, Async로 나눠져 있음PublishSubject
- PublishSubject는 Subject를 구현한 가장 단순한 타입 중 한 가지로 구독자들에게 이벤트를 널리 전달한다.
ReplaySubject
- 구독 시 이전에 발행했던 아이템 모두를 구독자에게 전달한다.
- PublishSubject에 cache 연산자를 적용한 것과 유사하다
BehaviorSubject
- BehaviorSubject는 PublishSubject와 동일하게 동작한다.
- 차이점은 새로운 옵저버를 통해 구독 시 가장 마지막 아이템 만을 발행한다는 것이다.
- 가장 최근 상태값을 가져오는 것이 중요할 때 사용할 수 있다.
- 구독을 시작할 때 Subject가 마지막으로 발행한 아이템을 가져오며, 이후에 발행되는 아이템들은 PublishSubject와 동일하기 모두 수신할 수 있다.
AsyncSubject
- onComplete() 호출 직전에 발행된 아이템만 구독자들에게 전달한다.
- Single, Maybe, Completable
- 데이터를 발행하고 끝내는 생산자
- 네트워크 통신 같은 단건 이벤트 처리를 위해 사용
Single
- 1개의 데이터를 전달하는 생산자
- 싱글 옵저버를 구독하거나 컨슈머를 구독하는 방식으로 소비자를 추가
- 일반적 네트워크 통신 시 주로 사용한다.
Maybe
- 0..1개 데이터를 전달하는 생산자
Completable
- 데이터 0개를 전달하는 생산자
'Programming > RxJava' 카테고리의 다른 글
[RxJava] 4. Filtering & Combining Operator (0) 2020.09.06 [RxJava] 3. Creating & Transforming Operator (0) 2020.09.06 [RxJava] 1. Observer Pattern에 대한 이해 (0) 2020.08.16 [RxJava] 넷플릭스가 만든 라이브러리, RxJava (2) 2020.08.16