Hot & Cold Observable

JSLee·2022년 3월 8일
0

When does an Observable begin emitting its sequence of items? It depends on the Observable. A “hot” Observable may begin emitting items as soon as it is created, and so any observer who later subscribes to that Observable may start observing the sequence somewhere in the middle. A “cold” Observable, on the other hand, waits until an observer subscribes to it before it begins to emit items, and so such an observer is guaranteed to see the whole sequence from the beginning.

해석 : 언제 Observable은 이벤트 발생을 시작할까요? 이는 Observable에 따라 다릅니다. ‘hot’ Observable은 만들어진 즉시 이벤트를 발생시킬 수 있고, 나중에 오는 구독자는 시퀀스의 중간부터 이벤트를 관찰하게 됩니다. ‘cold’ Observable은 반대로 어 떤 Observer에 의해 구독될 때 까지 아이템을 방출하지 않고 기다립니다. 또한 시퀀스 전체를 Observer가 받아볼 수 있음이 보장됩니다.


Hot , Cold Observable 의 기준

  • 이벤트 발생이 시작되는 시점 (구독시 vs 구독과 관계 없이)

  • 구독했을 때 이벤트 시퀀스를 처음부터 관찰할 수 있는가? (있다 vs 없다)


추가 파생 차이점


  • Hot Observable은 구독 여부에 상관 없이 이벤트를 발생시키기 때문에 일단 동작하기 시작하면 리소스를 사용하게 됩니다. 또한 이 동작을 시작하는 시점을 조절할 수 있는 메소드를 제공합니다. (RxSwift에서는 connect() 입니다.) Cold Observable은 구독과 동시에 무조건 동작하며, 그 이전에는 연산 자원을 소모하지 않습니다.

  • Hot Observable은 여러 Observer가 하나의 Observable을 공유할 수 있습니다. 하지만 Cold Observable은 Observer마다 별도의 Observable 인스턴스를 가지게 됩니다. 만약 시퀀스를 만들어 내는 과정이 오래 걸리는 경우, Cold Observable은 구독이 일어날 때 마다 그 과정을 거쳐야 합니다.


간단한 정리.

Hot Observable 은 Create과 동시에 Event 를 Emit 한다. 이후 Subscribe가 되는 시점과 관계 없이 Observer 들은 방출된 Event 를 중간부터 받을수 있다.

ReactiveX 는 Hot Observable 을 다른 말로 connectable Observable 이라고 부르기도 한다.

대표적인 Hot Observable Operator

Publish . Multicast . Connect , Replay , ReplayAll.Share . ShareReplay . ShareReplayLatestWhileConnected


Cold Observable 은 Observer 가 Subscribe 되는 시점부터 Event 를 Emit 하기 시작한다.

기본적으로 Hot Observable 로 Create 하지 않은 Observable 들을 Cold Observable 이라고 이해할수 있다.


위를 좀더 풀어서 설명할수 있는 방법은
News 와 VOD Service 를 예로 들수 있다.

Hot Observable 은 News 처럼 시청자가 News 시작이후 어느 시점부터 시청을 하던 상관없이 방송이 진행되고 시청자는 시청하는 순간부터의 정보만 전달 받을수 있다.

이러한 개념을 Hot Observable 개념으로 이해하면 좋을것 같다.

Cold Observable 은 VOD Service 처럼 시청자가 시청하고자 하는 비디오를 선택하여 처음부터 끝까지 시청할수 있다.

이러한 개념을 Cold Observable 개념으로 이해하면 좋을것 같다.

profile
iOS/Android/FE/BE

0개의 댓글