RxJava기록 - ConnectableObservable 클래스

dada·2022년 1월 4일
0

RxJava

목록 보기
8/12
  • Subject 클래스처럼 차가운 Observable뜨거운 Observable로 변환
  • Observable을 여러 구독자에게 공유할 수 있으므로 원 데이터 하나를 여러 구독자에게 동시에 전달 가능
  • subscribe() 함수를 호출해도 아무 동작이 일어나지 않는다.
    • connect() 함수는 호출한 시점부터 subscribe() 함수를 호출한 구독자에게 데이터를 발행

String[] dt ={"red","green","blue"};
Observable<String> balls= Observable.interval(100L, TimeUnit.MILLISECONDS)
            .map(Long::intValue)
            .map(i->dt[i])
            .take(dt.length);

ConnectableObservable<String> source =balls.publish();
source.subscribe(data->System.out.println("Subscriber #1 =>"+data));
source.subscribe(data->System.out.println("Subscriber #2 =>"+data));
source.connect();
        
CommonUtils.sleep(250);
source.subscribe(data->System.out.println("Subscriber #3 =>"+data));
CommonUtils.sleep(100);

👉🏻 첫 번째 구독자와 두 번째의 구독자가 추가되면 connect() 함수를 호출해 데이터 발생을 시작

sleep() 함수를 이용해 250ms를 기다리고 세 번째 구독자 추가
connect() 함수를 호출했으므로 이후에는 구독하면 다음의 데이터를 바로 수신할 수 있음.

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

0개의 댓글