RxJava기록 - Subject 클래스(1)

dada·2022년 1월 4일
0

RxJava

목록 보기
6/12

Subject 클래스는 차가운 Observable을 뜨거운 Observable로 바꿔줌
💁 Observable의 속성과 구독자의 속성이 모두 존재

AsyncSubject 클래스

  • Observable에서 발행한 마지막 데이터를 얻어올 수 있는 Subject클래스


1. 처음 구독자가 subscribe() 함수를 호출
2. 빨간색과 초록색이 발행된 후 두 번째 구독자가 subscribe() 함수를 호출
3. 마지막으로 파란색 원이 발행되고 데이터 발행을 완료(onComplete)
⇒ 이때 완료되기 전까지는 구독자에게 데이터를 전달하지 않다가 완료됨과 동시에 첫 번째와 두번째 구독자 에게 마지막 데이터를 발행하고 종료

AsyncSubject<String> subject =AsyncSubject.create();
subject.subscribe(data->System.out.println("Subscriber #1 => " +data));
subject.onNext("1");
subject.onNext("3");
subject.subscribe(data->System.out.println("Subscriber #2 => " +data));
subject.onNext("5");
subject.onComplete();

//결과값
Subscriber #1 => 5
Subscriber #2 => 5
  • 구독자로 동작하는 AsyncSubject 클래스
Float[] temperature= {10.1f,13.4f,12.5f};
Observable<Float> source =Observable.fromArray(temperature);
        
AsyncSubject<Float> subject =AsyncSubject.create();
subject.subscribe(data->System.out.println("Subscriber #1 =>" +data));
source.subscribe(subject);

//결과값
Subscriber #1 => 12.5

*OnCompelete() 함수를 호출한 후 구독

AsyncSubject<Integer> subject = AsyncSubject.create();
subject.onNext(10);
subject.onNext(11);
subject.subscribe(data->System.out.println("Subscriber #1 => " + data ));
subject.onNext(12);
subject.onComplete();
subject.onNext(13);
subject.subscribe(data->System.out.println("Subscriber #2 => " + data ));
subject.subscribe(data->System.out.println("Subscriber #3 => " + data ));

//결과값
Subscriber #1 => 12
Subscriber #2 => 12
Subscriber #3 => 12

👉🏻첫 번째 구독자가 subscribe() 함수를 호출하고 ‘12’라는 데이터를 발행한 후 onComplete() 함수 호출

이때, Observable처럼 onComplete() 함수 호출 이후에는 onNext 이벤트 무시

BehaviorSubject 클래스

  • 구독자가 구독을 하면 가장 최근 값 혹은 기본값을 넘겨주는 클래스

  • 분홍색 원은 BehaviorSubject 클래스를 생성할 때 넘긴 초깃값
  • 첫 번째 구독자는 초깃값을 받고 다음 빨간 공을 수신
  • 두 번째 구독자는 초록색 원이 발행된 이후에 구독했으므로 초록색이 가장 먼저 전달된다.
BehaviorSubject<String> subject = BehaviorSubject.createDefault("pink");
subject.subscribe(data -> System.out.println("Subscribe #1 => " + data));
subject.onNext("red");
subject.onNext("green");
subject.subscribe(data -> System.out.println("Subscriber #2 => " + data));
subject.onNext("blue")
subject.onComplete();

//결과값
Subscriber #1 => pink
Subscriber #1 => red
Subscriber #1 => green
Subscriber #2 => green
Subscriber #1 => blue
Subscriber #2 => blue
profile
기록하기

0개의 댓글