Programming/RxJava

[RxJava] 2. Subject / 생산자

haeseong5 2020. 9. 2. 15:27
Subject
  • 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개를 전달하는 생산자