본문 바로가기

프로그래밍/RxJava

[RxJava] Subject 클래스 - PublishSubject 클래스

PublishSubject 클래스는 Subject 클래스 중 가장 평범한 클래스이다.

구독자가 subscribe() 함수를 호출하면 값을 발행하기 시작한다.

 

AsyncSubject 클래스처럼 마지막 값만 발행하거나

BehaviorSubject 클래스처럼 발행한 값이 없을 때 기본값을 대신 발행하지도 않는다.

 

오직 해당 시간에 발생한 데이터를 그대로 구독자에게 전달받는다.

아래 그림은 PublishSubject의 마블 다이어그램이다.

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

 

PublishSubject클래스 사용방법 전체 코드 보러가기