PublishSubject 클래스는 Subject 클래스 중 가장 평범한 클래스이다.
구독자가 subscribe() 함수를 호출하면 값을 발행하기 시작한다.
AsyncSubject 클래스처럼 마지막 값만 발행하거나
BehaviorSubject 클래스처럼 발행한 값이 없을 때 기본값을 대신 발행하지도 않는다.
오직 해당 시간에 발생한 데이터를 그대로 구독자에게 전달받는다.
아래 그림은 PublishSubject의 마블 다이어그램이다.
첫번째 구독자가 subscribe()를 하게 되면
'빨간색 원'과 '초록색 원' 데이터를 발행하게 된다.
두번째 구독자가 subscribe()를 하게 되면
'파란색 원' 데이터를 발행하게 되고 완료가된다.
즉, 첫번째 구독자는 Subject 클래스가 발행한 '빨간색 원', '초록색 원', '파란색 원' 데이터를 모두 전달받았고,
두번째 구독자는 구독한 이후에 발행된 데이터 '파란색 원'만 전달받을 수 있게 된다.
위와 같은 구조를 아래와 같이 코드로 작성할 수 있다.
public void marbleDiagram(){
PublishSubject<String> subject = PublishSubject.create();
subject.subscribe(data -> System.out.println("Subscriber #1 => " + data ));
subject.onNext("red");
subject.onNext("green");
subject.subscribe(data -> System.out.println("Subscriber #2 => " + data ));
subject.onNext("blue");
subject.onComplete();
}
[결과값]
Subscriber #1 => red
Subscriber #1 => green
Subscriber #1 => blue
Subscriber #2 => blue
'프로그래밍 > RxJava' 카테고리의 다른 글
[RxJava] 데이터 발행자와 수신자 (0) | 2020.02.25 |
---|---|
[RxJava] Subject 클래스 - ReplaySubject 클래스 (0) | 2020.02.25 |
[RxJava] Subject 클래스 - BehaviorSubject 클래스 (0) | 2020.02.25 |
[RxJava] Subject 클래스 - AsyncSubject 클래스 (0) | 2020.02.20 |
[RxJava] 뜨거운 Observable (0) | 2020.02.20 |