안드로이드/Rx

RxJava에 대해 알아보자

코딩하는후운 2022. 10. 24. 08:59
반응형

RxJava에 대해 알아보자

RxJava

-reactive programming을 하기 위한 라이브러리인 Rx(reactive extensions)의 JVM판.
-reactive streams는 java8+에 친화적
-이벤트를 정의한 'Observable' 인스턴스에 대해 짧은 함수를 엮은(체인) 스트림 같이 이벤트 결과
데이터를 가공하는 처리를 정의, 지연실행, 비동기 콜백을 할 수 있다.
-Rxjava2.x에서는 Observable, Single, Maybe, Flowable로 클래스를 구분


1.null을 보내게 되면 바로 nullpointerException처리.
->completable, maybe 활용 가능
2.Flowable은 Backpressure를 지원하는 Observable이다.
3.Subscription의 Disposable로 변경됨.
4.Maybe클래스는 reduce()함수나 firstElement()함수와 같이 데이터가 발행 될 수 있거나
혹은 발행되지 않고도 완료되는 경우를 의미(값을 보낼 수도, 안 보낼 수도 있다)
-값이 있는 경우 onSuccess, 값이 없는 경우엔 onComplete가 호출된다.

Observable

-RxJava뿐만 아니라 리액티브 프로그래밍의 기본적인 모델이다.
-observable = reactive stream
-비동기 방식으로 전달되는 데이터 추상화

옵저버 패턴 Observer Design pattern

-일대다(one-to-many)의존성을 정의.
-객체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다
메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴
-주로 분산 이벤트 핸들링 시스템 구현하는데 사용.
-발행/구독 모델로 알려져 있기도 하다.
-데이터 전달방식은 2가지
1.주제객체에서 옵저버로 데이터를 보내는 방식(푸시 방식)
2.옵저버에서 주제객체의 데이터를 가져가는 방식(풀 방식)

Flowable

-배압(Back pressure)를 해결 하기 위해 flowable(RxJava2부터 도입)을 했다.
-Flowable은 Observable과 거의 비슷한데 다른 점이 back pressure이 지원된다는 점이다.
-back pressure이란 데이터의 처리 순서를 보장해주는 로직이다.
-Observable은 back pressure가 보장되지 않아 아이템이 순서대로 발행된다고 보장되지 않는다.

Observable

-이벤트 발행 주체
-Observer를 구독시키면 (subscribe())
-이벤트 발생 시 구독 중인 Observer의 onNext를 수행

RxJava Type

-Observable : 최상위 기본타입.
-Single : 1개의 데이터만 반환
-Maybe : Null 가능성 있는 1개의 데이터 반환
-Completable : 반환값 없이 수행 후 종료
-Flowable : Backpressure

SubscribeOn 와 ObserveOn 그리고 Schedulers

SubscribeOn

구독(subscribe)에서 사용할 스레드를 지정
도중 ObserveOn이 호출되어도 SubscribeOn의 스레드 지정에는 영향을 끼치지 않는다.

ObserveOn

Observable이 다음 처리를 진행할 때 사용할 스레드를 지정
Observable이 선언된 후 처리가 진행뒤 다른 ObserveOn이 선언시 다른 ObserveOn에서
선언한 스레드로 변경되어 이후 처리를 진행한다.

Schedulers

Observable연산자 체인에 멀티스레딩을 적용하고 싶다면, 특정 스케줄러를 사용해서 연산자
(또는 특정 Observable)를 실행하면 된다.

반응형