본문 바로가기
Programming 개발은 구글로/JAVA[Android]

[RxJava] 4. Observable의 종류

by 40대직장인 2022. 5. 31.

RxJava의 근간이 되는 Observable 클래스는 소프트웨어 디자인 패턴인 Observer Pattern(1)을 근간으로 되어 있습니다.

 

(1) 옵서버 패턴(observer pattern)은 객체의 상태 변화를 관찰하는 관찰자들, 즉 옵서버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴이다. 주로 분산 이벤트 핸들링 시스템을 구현하는 데 사용된다. 발행/구독 모델로 알려져 있기도 하다.

 

 


 

참고글: 옵서버 패턴

 

 

Observable에는 데이터를 로딩하고 바로 그 로딩된 내용을 반영할 것인가(Hot Observable) 아니면 사용자의 요청이 있을 때까지 기다릴 것인가(Cold Observable)라는 의미의 2 종류가 있습니다.

 

 

 

관련 글: Observable

2022.05.29 - [Programming Android[Java]] - [RxJava] 3.Observable 란?

 

🟦 Cold Observable

일반적으로 우리가 사용하는 것들은 모두 Cold Observable이라고 한다. 

 

Cold Observable은 Observable을 생성하고 Observer가 subscribe를 호출할 때까지 데이터 발행을 하지 않는다. 이 방식을 lazy Loading 기법이라고 한다.

 

RxJava에서 Cold Observable은 REST API와 통신 시 많이 이용되는 방법이다.

 

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

 

🟩 Hot Observable

Hot Observable은 Observer의 존재 여부와 관계없이 데이터를 발행한다.

 

단, Observer는 Observable이 발행하는 데이터 전부를 받는 것을 보장하지 못한다. Observer는 Hot Observable을 구독한 시점부터 발행된 데이터를 받을 수 있다.

 

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

 

여러 구독자가 구독하는 것이 가능하지만, 대량으로 데이터가 발생했을 때의 배압을 고려해야 한다.

 

 

 

관련 글: 배압 개념

2022.05.24 - [Programming Android[Java]] - [RxJava] 배압(Backpressure) 개념 이해

 

Cold Observable -> Hot Observable

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

 


 

관련 글: Subject와 ConnectableObservable

2022.12.01 - [분류 전체보기] - [RxJava] Subject 클래스, ConnectableObservable

 

 

 

 

 

댓글