ReactiveX Observable (2)

쓰리원·2022년 8월 2일
0

reactivex

목록 보기
3/3
post-thumbnail

1. Cold Observable 와 Hot Observable

RxJava에서 Cold Observable과 Hot Observable은 Observable이 데이터를 생성하고 방출하는 방식에 따라 구분되는 두 가지 유형의 Observable입니다.

Cold Observable : 생성된 이후 누군가 구독을 요청했을 때 '처음부터' 데이터 발행
Hot Observable : 데이터 발행 시작한 이후 모든 구독자들에게 '같은' 데이터 발행

예제 코드를 통해 살펴보겠습니다.

1. Cold Observable

Cold Observable은 Observable이 생성한 데이터를 각 Subscriber마다 독립적으로 새로 생성하여 방출하는 것이 아니라, 이미 생성된 데이터 스트림을 각 Subscriber들이 처음부터 순차적으로 처리하는 방식입니다. 따라서, 여러 Subscriber가 동시에 Observable의 데이터를 처리할 수 있으나, 각 Subscriber는 독립적으로 데이터를 처리하며, 데이터 스트림의 처음부터 시작하게 됩니다.

Observable<Integer> coldObservable = Observable.range(1, 5);
coldObservable.subscribe(i -> System.out.println("First Subscriber: " + i));
coldObservable.subscribe(i -> System.out.println("Second Subscriber: " + i));

위의 예제 코드는 Observable.range() 연산자를 이용하여 1부터 5까지의 정수를 생성하는 Cold Observable을 만든 후, 두 개의 Subscriber가 각각 Observable을 구독하는 코드입니다. 각각의 Subscriber는 생성된 데이터 스트림을 처음부터 순차적으로 처리하게 됩니다. 즉, First Subscriber는 1부터 5까지의 정수를 출력한 후, Second Subscriber가 1부터 5까지의 정수를 출력합니다.

1. Hot Observable

Hot Observable은 Observable이 생성한 데이터를 여러 구독자가 공유하는 방식입니다. 이러한 Observable은 이미 생성된 데이터 스트림을 여러 구독자가 공유하여 처리하므로, 구독자가 Observable을 구독하기 전에 이미 생성된 데이터를 처리할 수도 있습니다.

ConnectableObservable<Long> hotObservable = Observable.interval(1, TimeUnit.SECONDS).publish();
hotObservable.connect(); // ConnectableObservable을 활성화하여 데이터를 생성하도록 함
hotObservable.subscribe(i -> System.out.println("First Subscriber: " + i));
Thread.sleep(3000); // 3초 대기
hotObservable.subscribe(i -> System.out.println("Second Subscriber: " + i));
Thread.sleep(3000); // 3초 대기

위의 예제 코드는 Observable.interval() 연산자를 이용하여 1초마다 새로운 값을 생성하는 Hot Observable을 만든 후, ConnectableObservable을 이용하여 Hot Observable을 활성화시키는 코드입니다. 이후 첫 번째 Subscriber가 Observable을 구독하게 되고, 3초가 지난 후에 두 번째 Subscriber가 Observable을 구독합니다. 이후 Hot Observable은 생성된 데이터 스트림을 두 개의 Subscriber가 공유하여 처리합니다. 따라서, 두 개의 Subscriber가 모두 3초부터 시작하여 같은 시점부터 생성된 데이터를 처리합니다.

profile
가장 아름다운 정답은 서로의 협업안에 있다.

0개의 댓글