[RxSwift] Hot & Cold Observable

2021. 5. 5. 15:28RxSwift

반응형

Reactive Extension 즉, Rx의 개념에서 대표적으로 사용되는 개념인데요.

Hot & Cold 모두 느낌으로는 잘 알고 있지만 이를 한번 정리해보는 것도 좋을 것 같아서 정리해보려고 합니다.

 

우선 ReactiveX.io에 나와있는 Hot & Cold에 대한 설명을 보면 다음과 같습니다.

“Hot” and “Cold” Observables
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는 구독하는 순간에 시퀀스의 처음부터 끝까지의 이벤트를 전부 전달해주는 것 같습니다.

 

한번 Hot & Cold Observable에 대해 알아보겠습니다.

 

Hot Observable

가장 대표적으로 Hot Observable을 설명하는 개념은 실시간 Live Streaming 방송으로 들 수 있겠는데요. 여러분이 언제든 방송에 입장하게 되면 방송이 처음에 시작됐을 때부터가 아닌 현재 방송중인 시점부터 방송을 받아볼 수 있게되죠? (그러니깐 본방사수를 하겠죠..?!)

 

Hot Observable에 대표적인 것으로는 RxSwift에서는 무엇이 있을까요..?

제가 생각했을 때는 Timer, Subject, UIEvent 같은 것들을 생각할 수 있을 것 같습니다.

 

이러한 것들은 상태를 저장하고 있고 구독하는 순간에 현재의 상태에 대해 이벤트를 방출해주는 것들이죠. 즉, 이전에 방출했던 데이터에 대해서는 현재 구독을 시작한 Observer들은 받아볼 수 없습니다.

 

그리고 이러한 Observable의 특징으로는 여러 Observer들이 동일한 Observable을 구독하고 리소스를 공유하는 것이 가능해집니다. UI에 어떤 요소를 표현해야할 때 적절하게 사용할 수 있는 Observable이 됩니다..!!

 

 

Cold Observable

다음으로 Hot Observable과 반대되는 개념인 Cold Observable은 VOD로 설명할 수 있을 것 같습니다. 언제부터 시청을 하더라도 처음부터 끝까지 원하는 부분을 시청하는 것이 가능하죠? 대표적으로 뭐 Netflix, 왓챠 같은 동영상 스트리밍 서비스들을 생각할 수 있습니다. 

 

Cold Observable에 대표적인 것으로는 RxSwift에서는 무엇이 있을까요?

Single, just, of 등등의 컴포넌트 들이 있을 것 같습니다. 음 이렇게 표현하기도 애매한데 보통 HTTP 요청으로 Observable을 생성해서 사용하는 경우가 가장 대표적인 예가 될 것 같습니다. 

 

Cold Observable은 역시 상태를 저장한다기보다는 Observer들이 구독을 시작했을 때, 처음부터 끝까지의 이벤트 스트림을 받아볼 수 있습니다. 즉, 모든 시점에 대한 스트림 이벤트를 받아볼 수 있습니다. 

 

이러한 Observable들은 Hot Observable과는 다르게 각 리소스에 대해 공유가 불가능하겠죠?~ 구독하는 즉시 이벤트가 방출되기 때문에 Observer들이 다 다른 인스턴스들을 공유하게 됩니다.

 

 

RxSwift에서 Cold ObservableHot Observable처럼 사용할 수 있는 방법도 존재하고 Hot ObservableCold Observable처럼 사용할 수 있는 방법이 존재합니다. 

 

Hot Observable -> Cold Observable처럼 사용할 수 있는 방법은 RelaySubject를 이용하는 방법이 있는데 반대의 경우는 아직 잘모르겠습니다.. 혹시 아시는 분이 있으면 댓글 달아주시면 감사하겠습니다 :)

 

오늘은 Rx에서 기본적인 개념이라고 할 수 있는 Hot & Cold Observable에 대해 알아보았습니다.

혹시 잘못된 개념이나 이해되지 않는 부분이 있으면 댓글 달아주세요 :)
감사합니다~~

반응형

'RxSwift' 카테고리의 다른 글

[RxSwift] Operator란?  (0) 2021.06.21
[RxSwift] RxSwift란 - Observable, Disposable  (0) 2021.02.11