Cold Observable vs Hot Observable
Cold Observable
Observer가 구독한 순간부터 아이템을 발행하는 스트림
- 구독하는 Observer가 없다면 데이터를 발행하지 않음
- 일반적인 Rest API 통신, 데이터베이스 쿼리 등에 사용함
- 처음부터 데이터 발행하는 데이터를 받는 기본으로 함
- 일반적으로 Observable을 생성하여 사용하는 경우에 해당(ex: create, single, fromArray 등의 연산자로 생성한 Observable)
Hot Observable
Observable을 생성하자마자 아이템들을 발행하는 스트림
- 구독자의 존재와 상관 없이 데이터를 방출하는 Observable
- 마우스 이벤트, 키보드 이벤트, 시스템 이벤트 등에 주로 사용
- 구독 시점으로부터 발행하는 데이터를 받는 것을 기본으로 함
- Subject 클래스(AsyncSubject, BehaviorSubject, PublishSubject, ReplaySubject)
Subject 클래스
AsyncSubject
AsyncSubject 클래스는 Observable 에서 발행한 마지막 데이터를 얻어올 수 있는 Subject 클래스 입니다.
완료되기 전 마지막 데이터에만 관심이 있으며 이전 데이터는 무시합니다. 즉, onComplete() 되기 전 마지막 onNext()의 값만 처리합니다.
BehaviorSubject
BehaviorSubject 클래스는 구독자가 구독을 하면 가장 최근 값 혹은 기본값을 넘겨주는 클래스입니다.
PublishSubject
PublishSubject 클래스는 가장 평범한 Subject 클래스입니다. 구독자가 subscribe() 함수를 호출하면 값을 발행하기 시작합니다. 해당 시간에 발생한 데이터를 그대로 구독자에게 전달하게 됩니다.
ReplaySubject
ReplaySubject 클래스는 가장 특이하고 사용할 때 주의가 많이 필요한 클래스입니다.
앞서 학습한 바에 의하면 Subject 는 Hot Observable로 변환하여 사용하기 위한 것인데 이 클래스는 Cold Observable 처럼 동작하기 때문입니다.
Replay Subject는 구독자가 새로 생기면 항상 데이터의 처음부터 끝까지 발행해주는 클래스입니다.
그러므로 모든 데이터 내용을 저장해두는 과정에서 메모리 누수가 발생할 수 있다는 가능성을 염두에 두고 사용해야 합니다.
'안드로이드 > RxJava' 카테고리의 다른 글
[안드로이드] RxJava - 변환 연산자 (0) | 2022.04.06 |
---|---|
[안드로이드] RxJava - 생성 연산자 (0) | 2022.04.01 |
[안드로이드] RxJava 연산자 종류 (0) | 2022.03.31 |
Observable에 관해서.. (0) | 2021.06.08 |
RxJava란? (0) | 2021.06.08 |