RxSwift의 Unit Test 강의 중, Hot Observable과 Cold Observable을 듣게 되었습니다.
Observable이 뜨겁거나 차가울 수 있나..?
당최 뭔소린지..^^
그래서 둘의 차이를 알아보았읍니다.
먼저 RX 공식 문서를 확인해 봤습니다.
아래는 ReactiveX 공식 문서에서 발췌한 내용입니다.
“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 구독이 일어나야 방출할 수 있습니다.
그래서, 둘의 차이를 비교해보면..?
Hot Observable | Cold Observable |
---|---|
생성과 동시에 방출 | 구독 전까지 방출하지않음 |
나중에 구독한 옵저버는 시퀀스의 중간부터 관찰 | 시퀀스의 전체를 볼 수 있음 |
Hot Observable은 구독 여부와 관계 없이 이벤트를 방출하기 때문에, 생성된 순간부터 리소스를 사용하게 됩니다.
때문에 추후에 구독하게 되면, 시퀀스 전체를 관찰할 수 없고 구독 시점에 따라 전달받는 요소가 다릅니다.
RxSwift에서는 구독 시점을 조절하는 Connect()
라는 메서드를 제공합니다.
추억의 무한도전을 예로 들어보겠습니다.
매주 토요일 6시 30분에 방송을 한다고 하면, 그 당시 우리들은 본방사수를 위해 TV앞에 모였죠.
근데 무한도전은 제가 TV앞에 있지 않아도 방영이 됩니다.
일이 있어 집에 늦게간다면, 해당 시간부터 시청할 수 있고 지나간 방송을 다시 볼 수 없습니다.
이와 같이, 시점에 따라 전달받는 요소가 다르게 되는 상황에 사용됩니다.
Cold Observable은 구독이 일어나야 방출을 할 수 있습니다.
때문에, 시퀀스의 전체를 볼 수 있습니다.
예를 들어,
우리가 신용 카드를 사용할 때마다 어플 알림이 울리도록 설정하려 한다면
알림을 신청하고 해당 신청이 이루어진 시점 이후부터의 카드 사용 내역 알림이 울리게 됩니다.
이전에도 카드를 사용하였지만, 해당 내역에 대한 알림을 울리지 않죠.
이와 같이, 구독 이후에 이벤트를 방출해야하는 상황에 사용됩니다.