세상을 바꾸는 개발자

[RxJava] Cold Observable과 Hot Observable의 차이 본문

안드로이드/RxJava

[RxJava] Cold Observable과 Hot Observable의 차이

헬창코딩 2021. 8. 26. 23:10

안녕하세요~ 헬창코딩입니다. 

오늘은 Cold ObservableHot Observable의 차이에 대해서 알아볼까 합니다.

 

Observable을 구현하는 방식에서 Observable과 Observer 사이에 미묘한 동작 차이가 있습니다.

이를 Cold Observable Hot Observable이라고 부릅니다.

 

Cold Observable은 지금까지 앞에서 다뤄 왔던 예제들처럼 Observable에 구독을 요청하면 아이템을 발행하기 시작합니다. 

아이템은 처음부터 끝까지 발행이 되고, 임의로 종료하지 않는 이상 여러 번 요청에도 처음부터 끝까지 발행하는 것을 보장합니다. 

interval 연산자를 이용하여 1초마다 아이템을 발행하는 Cold Observable을 살펴보겠습니다.

 

  Observable src = Observable.interval(1, TimeUnit.SECONDS);
            src.subscribe(data -> Log.d("log_test", "#1::"+data));
            Thread.sleep(3000);
            src.subscribe(data -> Log.d("log_test", "#2::"+data));
            Thread.sleep(3000);

 

결과

위의 결과를 확인해보면

Observable을 구독하고 3초 뒤에 새로운 구독자로 다시 구독했을 때도 처음부터 다시 아이템을 발행하고 있습니다.

 

반면에 Hot Observable은 아이템 발행이 시작된 이후에 모든 구독자에게 동시에 같은 아이템을 발행합니다. 

안드로이드를 예를 들면 브로드캐스트 메시지를 글로벌하게 전송한다고 생각을 하면 됩니다.

만약에 첫번째 구독자가 Observable을 구독하고, 몇 초 뒤에 두 번째 구독자가 똑같은 Observable을 구독한다고 가정하면

이 둘은 같은 아이템을 동시에 수신을 합니다만, 두 번째 구독자는 구독하기 전에 발행된 아이템을 놓칠 수도 있습니다.

이것이 Hot Observable의 특징입니다.

Comments