[RxJava] RxJava 이해하기 - 4. Hot Observable, Cold Observable



Cold Observable

Observable에는 Hot ObservableCold Observable 두 가지가 있다. 일반적으로 우리가 사용하는 것들은 모두 Cold Observable이라고 한다. Cold Observable은 Observable을 생성하고 Observer가 subscribe를 호출할 때까지 데이터 발행을 하지 않는다. 이 방식을 lazy하다고 한다.

:bulb: Cold Observable의 예시로는 데이터베이스 쿼리, 파일 읽기, API 요청 등이 있다. 원하는 시점에 데이터를 요청하고 처음부터 끝까지 결과를 받아온다.


Hot Observable

그럼 Hot Observable은 뭘까? Hot Observable은 Observer의 존재 여부와 관계없이 데이터를 발행한다. 단, Observer는 Observable이 발행하는 데이터 전부를 받는 것을 보장하지 못한다. Observer는 Hot Observable을 구독한 시점부터 발행된 데이터를 받을 수 있다.

:bulb: Hot Observable의 예시로는 마우스 이벤트, 키보드 이벤트, 센서 데이터 등이 있다. 가장 최근의 데이터를 처리한다.


Cold Observable -> Hot Observable

RxJava에는 Cold Observable을 Hot Observable로 변환해주는 Class도 있다. 바로 SubjectConnectableObservable이다.


Subject

Subject 클래스에는 대표적으로 AsyncSubject, BehaviorSubject, PublishSubject, ReplaySubject가 있다.

public abstract class Subject<T> extends Observable<T> implements Observer<T>

Subject의 가장 큰 특징은, Subject는 Observable을 상속하고 Observer를 구현하고 있어 Observable처럼 쓰일 수도, Observer처럼 쓸 수도 있다는 것이다.


ConnectableObservable

ConnectableObservable은 subscribe() 말고 publish()connect()를 사용한다. publish()는 connect()가 호출되기 전까지 데이터 발행을 유예한다.

img



:bookmark: REFERENCE
유동환, 박정준, 「RxJava 프로그래밍」, 한빛미디어
ReactiveX Publish