study record
[RxSwift] Hot Observable과 Cold Observable의 차이 본문
Observable : 특정 형태의 데이터를 전달하는 이벤트를 비동기적으로 생성할 수 있는 객체.
Observable은 Hot Observable, Cold Observable 두가지 종류로 구분될 수 있다.
Hot Observable과 Cold Observable을 구분하는 기준은 다음과 같다.
- 이벤트 발생이 시작되는 시점(구독시 vs 구독과 관계 없이)
- 구독했을 때 이벤트 시퀀스를 처음부터 관찰할 수 있는가(있다 vs 없다)
Hot Observable
Hot Observable은 구독 여부에 상관 없이 이벤트를 발생시키기 때문에 일단 동작하기 시작하면 리소스를 사용하게 된다. 따라서 구독했을 때 이벤트 시퀀스를 처음부터 관찰하지 못할 수 있다. 구독하는 시점에 따라서 전달받는 요소가 다르다.
또한 이 동작을 시작하는 시점을 조절할 수 있는 메소드를 제공한다(RxSwift의 connect()).
Hot Observable에는 Subject가 있다.
예를 들어 API 호출 테스크를 진행할 때 여러 부분에서 이 결과가 필요하다면 그 때마다 API를 호출하기 보다 그 결과를 공유한다면 더 효과적일 것이다. 이럴 때 Hot Observable이 사용되게 된다.
Cold Observable
Cold Observable은 구독과 동시에 무조건 동작하며 그 이전에는 연산 자원을 소모하지 않는다. 구독했을 때 시퀀스를 처음부터 관찰할 수 있다. 어느 시점에서 구독을 하든지 같은 결과를 받는다.
Cold Observable은 일반적으로 사용해오던 Observable 이다. of, just, from 등이 속한다. 구현을 해도 구독하지 않았다면 방출되지 않는다.
Hot Observable은 여러 Observer가 하나의 Observable을 공유할 수 있다. 하지만 Cold Observable은 Observer마다 별도의 Observable 인스턴스를 가지게 된다. 만약 시퀀스를 만들어 내는 과정이 오래 걸리는 경우, Cold Observable은 구독이 일어날 때 마다 그 과정을 거쳐야 한다.
Hot Observable의 대표적인 것들은 프로퍼티, 타이머, UIEvent 등이 있고 Cold Observable의 대표적인 것들은 Http 요청을 들 수 있다.
참고 :
https://github.com/lunchScreen/Interview_Questions/issues/92
https://www.notion.so/Hot-Cold-Observable-a28377249879411188e229255e39c614
'iOS > RxSwift' 카테고리의 다른 글
[RxSwift] Driver란? (0) | 2022.03.29 |
---|---|
[RxSwift] Subject와 Relay (0) | 2022.03.14 |
[RxSwift] Subject의 종류 (0) | 2022.03.11 |
[RxSwift] RxSwift 왜 사용하게 되었나? +(선언적 프로그래밍) (0) | 2022.03.07 |
[RxSwift] Observable과 Subject 차이 (0) | 2022.03.05 |