버그 잡이

[RxJava] RxJava 기초 용어 정리 #Flowable #Disposable #RxJava vs RxAndroid 본문

모던 안드로이드/RxJava

[RxJava] RxJava 기초 용어 정리 #Flowable #Disposable #RxJava vs RxAndroid

버그잡이 2020. 4. 28. 11:49

1. gradle 설정

implementation 'io.reactivex.rxjava3:rxjava:3.0.3'
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'

 

 

*RxJava vs RxAndroid

 

- RxJava가 핵심 라이브러리고 RxAndroid는 RxJava를 안드로이드 환경에서 보다 쉽게 사용할 수 있도록 도와주는 라이브러리이다.

- 예를 들어, RxAndroid에서는 Scheduler라는 기능을 제공하는데 이는 안드로이드에서 스레드 처리를 보다 쉽게 도와준다.

 

 

 

 

 

 

3. Flowable

 

- flowable 는 'back-pressure' 라는 문제로 인해서 도입되었다.

 

 

back-pressure

 

Backpressure is when in a Flowable processing pipeline can't process the values fast enough and need a way to tell the upstream producer to slow down.

(속도가 충분히 빠르지 못해서 값들을 처리할 수 없는 상황이다. 그래서 data 생산자에게 속도를 줄여달라고 요청할 필요가 있는 상황이다.)

 

 

옵저버에 너무 많은 데이터가 분출되어서 옵저버가 이를 다룰 수 없는 상황을 생각해보자. 이 경우 Out of Memory Exception이 발생할 것이다. 

 

 

 

backpressure와 관련된 두 가지 용어(Hot source vs Cold source)를 집고 넘어가자.

 

 

Hot source vs Cold source

 

Hot source는 일종의 Push 이다. observer가 받을 역량이 되던 말던 obervable은 data를 계속 push한다. 따라서 이 방식은 observer가 넘치는 데이터를 다룰 수 있게 buffering 전략이 필요하다.

 

Cold source는 일종의 Pull 이다. observer가 데이터를 받길 원할때만 또는 observer에게 적정한 주기로 데이터를 보낸다. 이 방식은 데이터가 넘치지 않기에 buffering 전략이 필요없다.

 

 

Hot source 방식에서 사용하는 buffer 방식이 BackpressureStrategy 다. 

 

 

 

 

RxJava는 2개의 observable 객체를 가지고 있다

 

1) Observable : backpressure-aware X

 

2) Flowable : backpressure-aware O

 

 

 

 

*한줄 요약

 

  "backpressure에 대한 Buffering 전략을 사용하고 싶을땐 Flowable 객체를 사용한다."

 

 

 

 

 

 

 

4. Disposable

 

disposable은 observable을 처리하는 역할을 수행한다.

 

옵저버로 observable을 관찰하는데... 더 이상 필요가 없을때

또는 필요하지 않은 observable인데 지속적으로 data를 emitt하고 있어서 메모리 누수가 발생할때

 

이럴때 사용하는 것이 disposable 이다.

 

 

 

*사용법

 

1) 객체 생성

 

   CompositeDisposable disposables = new CompositeDisposable();

 

 

2) observer 에서 disposable을 반환하는 부분을 찾아. disposable 객체에 추가하기

 

    @Override

     public void onSubscribe(Disposable d){  disposables.add(d); }

 

 

3)  onDestroy에서 지우기

 

   disposables.clear()

 

 

 

*Single 객체인 경우

 

RxJava에는 Observable, Flowable과 같은 객체 말고도 Single이라는 객체가 있다.

 

Single은 Observable, Flowable처럼 계속해서 data를 발행하는 것이 아니라 최초 한번만 데이터를 발행하고 데이터를 발행하지 않는다.

 

이러한 객체의 특성상 onSuccess, onError 이후에 자동으로 dispose 되기 때문에 따르 dispose 처리할 필요가 없다.

 

* 참고 : https://github.com/ReactiveX/RxJava/issues/5697

 

 

 

 

 

 

반응형
Comments