본문 바로가기

Swift/RxSwift

[🔥Rx뿌셔] Hot Observable VS Cold Observable

728x90

Observable은 이벤트를 emit하는 요소이다.

그리고 이 Observable의 형태/종류는 크게 두가지로 나눌 수 있다.

 

Hot Observable 🔥 은 구독 여부에 관계 없이 요소를 방출해주는 Observable,
Cold Observable🧊 은 구독이 되어야지 비로서 요소가 방출이 되는 Observable 이다.

 

🧊 Cold Observable 

일단 Cold Observable🧊은 우리가 일반적으로 지금까지 사용해오던 Observable이다. 

of, just, from, 그리고 커스텀하게 만든 Observable 에 별다른 처리를 하지 않았다면 모두 Cold Observable🧊 이다. 

 

이 Observable은 구현을 하고 나서, 구독을 하지 않으면 요소가 절대 방출되지 않는다.

이름처럼 구독하기 전에는 얼어있는 것이다. 구독자가 구독을 하게 되면 그제서야 얼음을 깨고 요소가 emit된다고 생각할 수 있다.

 

🔥 Hot Observable 

Hot Observable은 Cold Observable과 반대 개념이라고 볼 수 있다. 

 

 

Observable을 유튜버라고 했을 때 두가지가 어떤 차이가 있는지 살펴보자.

예를 들어서 소깡이라는 유튜버가 있다고 하자.

그러면 사람들은 일단, 이 소깡이라는 유튜버의 존재를 모른다.

 

그러다가, 어느 날 알고리즘의 선택을 받아서 소깡이의 영상이 사람들의 추천 영상에 올라오게 되었고, 생각보다 흥미로운 내용들이 많아 구독을 하고 알림을 설정했다고 해보자.

 

그럼 이제 앞으로는 소깡이가 영상을 올리게 되면 알림을 받게 될 것이다.

(= Observable에서 요소를 방출한 것과 같다.)

 

그런데, 소깡이는 사실 사람들이 구독을 하고 알림을 설정하기 전부터 영상을 올려왔다.

그런데, 사람들은 소깡이를 구독하기 전에 올린 영상들에 대해서는 구독을 하지 않았기 때문에 알림을 받지 않았다.

 

이렇게 구독하는 시점에 영향을 받는 Observable이 바로 Hot Observable이고

 

반대로, Cold Observable은 사람들이 소깡이를 구독하게 되면, 그 순간 영상을 올리는 것이다.

(그래서, Cold Observable은 구독자가 10명이면 10개의 영상을 올리는 것이다.)

 

이렇게 Observable이 계속해서 가동되고 있기 때문에, 뜨겁다고 생각할 수 있고, 그래서 Hot Observable이라고도 생각할 수 있다.

 


왜 이렇게 Cold Observable과 Hot Observable이 나뉘어서 존재하는 것인가?

 

바로 Hot Observable🔥은 여러 구독자가 공유해서 사용할 수 있기 때문에 성능적인 측면에서 생각했을 때에 꼭 필요한 Observable이기 때문이다. 

 

예를 들어서 API를 통해서 꽤나 무거운 데이터를 받아온다고 해보자.

 

그리고 이를 Observable을 통해서 결과를 방출해 준다고 할 때,

그리고서 이 Observable을 구독하게 되면 요소가 잘 전달이 될 것이다.

 

여기까지는 Okay.

어차피 한 번 호출하는 것이니 Cold Observable🧊로서 사용해도 성능상 별다른 이점이 없다.

 

그런데 만약, 

이 받아온 결과를 가지고서 이러한 처리도 해주고 저러한 처리도 해주고 이것저것 많은 역할을 수행한다고 해보자.

 

그렇게 되면 이것저것 처리하는 만큼 API 호출 Observable을 불러오게 될 것이다.

이 때 어차피 API로 호출한 결과는 모두 같은텐데 이를 여러번 호출할 필요가 있을까?

 

❌❌ 당연히 없고, 오히려 메모리가 낭비될 수 있다. ❌❌

바로 이럴 때 Hot Observable🔥을 사용하게 되면 여러 구독자들이 API를 호출하기 전 시점에 미리 구독을 해주고서 결과가 방출이 되면 그 결과를 여러 Observer가 공유해서 사용할 수 있다. 

 

바로 이런식의 경우를 위해서 Hot Observable🔥이 꼭 필요한 것이다. 

 

Cold Observable🧊은 구독하면 항상 같은 결과를 받는 반면, Hot Observable🔥은 구독하는 시점에 따라서 받게되는 결과가 달라진다.

이 개념이 확장되어서 Hot Observable이 multi cast가 가능한 것이고, Cold Observable은 uni cast가 가능한 것이다. 

 

 

🔥 정리 
상황에 맞게 Hot Observable🔥이나 Cold Observable🧊 중에 골라서 사용하도록 하자!
Cold Observable🧊은 구독하면 항상 같은 결과를 받는 반면, Hot Observable🔥은 구독하는 시점에 따라서 받게되는 결과가 달라진다.