brunch

매거진 ReactiveX

You can make anything
by writing

C.S.Lewis

by Tilltue Sep 24. 2016

RxSwift, Hot & Cold Observable

hot,cold observable connectable. connect


ReactiveX 관련 자료들을 보다보면, "hot 또는 cold" Observable이 종종 언급되는데

이 둘의 차이점과 관련 함수들을 통해 이해를 해보자.


RxSwift 에서 설명하고 있는 내용이 이해가 쉽게 된다면 이 글은 보지 않아도 된다.

이 글은 좀더 쉽게 이해를 돕고자 작성한 글이다.



Hot Observable

생성과 동시에 이벤트를 방출하기 시작한다. 또, 이후 subscribe 되는 시점과 상관없이 옵저버들에게 이벤트를 중간부터 전송해준다.

Reactivex 에서 다른말로, connectable Observable 이라고 부르기도 한다. 

관련 메서드는 아래와 같고, subscription 의 공유 에서 확인 할 수 있다.

publish / multicast / connect 

replay / replayAll

share / shareReplay

shareReplayLatestWhileConnected


Cold Observable

옵저버가 subscribe 되는 시점부터 이벤트를 생성하여 방출하기 시작한다.

기본적으로 Hot Observable 로 생성하지 않은 것들은 Cold Observable 이라고 이해하면 된다.



이해를 돕기 위해 예를 들면, 유트브의 실시간 방송과, 일반 VOD 방송의 개념으로 이해하면 좋겠다.

유트브의 실시간 방송은 시청자( observer ) 가 어느 시점에 방송을 청취하던, 상관없이 방송이 진행되고,

시청자는 방송을 시청( subscribe ) 하는 시점부터(middle emit event ) 방송을 볼수 있다.( 이벤트를 받을수 있다 ) 이 개념이 Hot Observable 이다.


일반 VOD의 경우 어떤 시청자건 ( observer ) 시청을 시작하면(subscribe) 처음부터 방송이 시작된다. ( emit  1,2,3... 처럼) 이 개념이 Cold Observable 이다.


이 내용만 가지고는 충분하게 느껴지지 않을지도 모르겠지만, 점점 Rx를 사용하다보면, 명확해지고 몇번씩 더 되짚다 보면 정확히 이해할 수 있다.


아래 동영상도 한번 보면 이해하기 좋을 것 같다.

https://www.youtube.com/watch?v=IDy21J75eyU


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari