본문 바로가기
Android 개발/Room, Realm, Databases

Hot Observable 과 Cold Observable은 무엇인가요?

by Developer88 2017. 3. 19.
반응형

오늘은 RxAndroid의 Hot Observable과 Cold Observable에 대해서 정리해 보겠습니다.

Hot하고 Cold하다는 것이, 어떤 면에서 차이가 있는지 알아보고,

Cold Observable을 사용하는 Operator도 정리해보겠습니다.


참고로, RxAndroid의 기본적인 사항에 대한 것은 아래 글을 참조해주세요.

>>> RxAndroid 이해하기 Part1 <<<


먼저 HotObservable에 대해서 정리해 볼께요.



1. Hot Observable


Observable은 데이터의 Stream이라고 했었는데요.

뭐가 Hot하다는 걸까요?

(데이터를 데울수 있는 것도 아니고 말이지요;;;)


여기서 Hot하다는 것은,

Observable을 생성하자마자 아이템 들을 흘려내보낸다는 것입니다.


그래서, Observable을 생성하고, 일정시간이 지난 상태에서 subscribe하게 된다면, 

처음부터 아이템을 받아보지는 못하고, 중간부터 나온 아이템들부터

subscribe할수 있게 됩니다.


그럼, 이번엔 Cold Observable도 알아보겠습니다.



2. Cold Observable


Hot Observable이 생성되자 마자,

아이템들을 흘려보내는 것이라고 했으니,

Cold Observable은 반대일 텐데요.


바로 흘려보내지는 않고 언제 흘려보낸다는 것일까요?

Subscribe할 때, 아이템들을 흘려보낸다는 것입니다.


이렇게 하면, 놓치는 것 없이, 

Observable이 흘려보낸 아이템들을 모두 받아볼 수 있겠네요.


참고로, Connectable이라는 Observable도 있는데요.

이 Observable은 Connect메소드가 호출될 때,

아이템들을 흘려보내준다고 합니다.

(수동이라고 생각할 수 있을 것 같네요)


일반적인 방법이 Hot Observable이라고 할 수 있을 것 같구요.

Cold Observable이라는 개념은 알겠는데,

어떻게 구현하는 것일까요?


이를 구현하는데 필요한 Operator의 대표적인 예로 

fromCallable이 있는데요.


이 Operator에 대해서 추가로 정리해 보겠습니다.



3. fromCallable


fromCallable이라는 operator의 이름이 예사롭지가 않습니다.


Callable은 Generic으로 받은, 오브젝트 타입으로 value를 return해주는,Thread에 전달할 작업입니다.

(Callable에 대해서 궁금하시면 옆의 링크를 눌러주세요  >> Callable 과 Runnable 뭐가 다른가요? <<)


소스코드의 설명도 한번 보고 가겠습니다.

observer가 subscribe하기 전까지는 실행을 미루고 있다가,

subscribe하는 순간에 실행하기로 한 function을 실행시킨다고 설명이 되어 있는데요.


방금 위에서 저희가 봤던, Cold Observable의 개념을 구현하도록 되어 있는 거네요.




실제로 구현해보면 다음과 같은데요.

먼저, fromCallable을 이용해서, cold Observable을 생성하구요.




subscribe 해주면, subscribe 한 시점에 call메소드가 호출이 되서 Toast가 실행이 됩니다.




아래와 같이 동작합니다.



728x90

댓글