View
Hot observable vs Cold observable?
이번에 다루어 볼 내용은 Rxjava의 Hot Observable과 cold Observable이다.
저번 포스트에서 Observable에 대해서 개념 정리를 했는데.. 궁금해하는 개발자들을 위해서 간단히 설명한다.
Cold Observable
Observable를 생성하고 데이터를 바로 흘려보내지 않는다는 것을 의미한다.
즉 바로 데이터를 흘러보내는 것이 아닌 Subscribe를 할 때, 데이터를 흘려보낸다는 것이다.
우리가 보통 사용하는 일반적인 Observable이 이에 해당한다.
간단히 정리를 해보면
- 일반적인 Observable 형태를 말하고
- 누가 구독해주지 않으면 데이터를 방출해주지 않는다.
- 일반적으로 웹 요청, 데이터베이스 쿼리 등에 사용되면 내가 요청하면 결과를 받는 과정을 거친다.
- 그리고 처음부터 발행하는 것을 기본으로 한다.(즉 데이터를 처음부터 끝까지 발행되고, 임의로 종료시키지않는 이상 여러번 요청에도 처음부터 끝까지 발행하는 것을 보장한다.)
Hot Observable
Observable을 생성하자마자 데이터를 흘러보낸다는 의미이다.
즉 Observable을 생성하고 일정 시간이 지난 후에 subscribe을 하게 되면 처음부터 데이터를 모두 받는 것이 아닌 우리가 subscribe을 한 시점에 들어온 데이터부터 받게 되는 것이다.
간단히 정리를 해보면
- 구독자의 존재 여부와 관계없이 데이터를 방출하는 Observable 이며
- 여러 구독자에게 선택적으로 고려가 가능하다.
- 구독을 한 시점에서 부터 발행되는 값을 받는 것을 기본으로 한다.
- 주로 시스템, 키보드, 마우스 이벤트 등에 사용된다.
- 멀티캐스팅도 포함된다고 한다.
안드로이드에서 예시로는 UI 이벤트가 있다. 안드로이드에서의 클릭 이벤트는 observer가 구독한 후 이벤트만 수신하는 용도로 사용하며, 이를 재생(replay)하기위해서 캐싱할 필요가 없다.
그럼 언제 왜 사용할까?
Cold observable은 스트림을 분기시키는 성질을 가지고 있지 않기 때문에 여러번 subscribe할 경우, 각각의 다른 스트림이 생성되고 할당되게 된다. 하지만 Hot Observable은 스트림을 분기시키는 성질을 가지고 있기 때문에 스트림 분기가 필요한 경우 Hot Observable을 사용한다.
즉 하나의 스트림을 여러번 subscribe 해야되는 경우는 Hot Observable을 아닌 경우에는 Cold Observable을 사용합니다.
그리고 일반적인Observable(Cold Observable)
을 Hot Observable
로 바꾸는 방법은 ConnectableObservable
과 Subject 클래스
를 사용하는 것입니다.
ConnectableObservable
ConnectableObservable은 Cold Observable을 hot Observable로 변환이 가능한 옵저블로 데이터 배출 시 subscribe()
메소드를 사용하기에 앞서 publish()
연산자와 connect()
연산자를 사용하는 방법이다.
ConnectableObservable의 특징 은 구독을 요청해도 데이터를 곧바로 발행하지 않는다는 점으로, publish() 연산자를 통해 일반적인 Observable을 Hot Observable로 변환하고 connect() 연산자를 호출할 때에 비로소 데이터가 발행된다.
단!! publish() 연산자만으로는 데이터replay가 활성화되지 않는다.
'TIL > 스터디' 카테고리의 다른 글
hilt가 무엇인디? (3) | 2024.02.27 |
---|---|
안드로이드 Task(간단 포스트) (0) | 2024.02.26 |
Subject 클래스(PublishSubject, ReplaySubject) (0) | 2024.02.22 |
Subject 클래스(AsyncSubject, BehaviorSubject) (0) | 2024.02.21 |
RxJava (2) | 2024.02.15 |