본문 바로가기

안드로이드 스튜디오

[안드로이드 스튜디오] RxJava에 대해 알아보자

728x90
반응형

 

 

 

 

 

1. RxJava란 ?

  • Rx는 ReactiveX의 약자로 Rxjava는 명령형 프로그램인 Java 언어 방식을 반응형 프로그래밍으로 사용할 수 있게끔 도와주는 라이브러리이다. 
  • 복잡한 비동기 프로그램을 쉽게 만들 수 있게 해준다. 또한 비동기에서 처리하기 힘든 에러 처리나 데이터 가공을 쉽게 할 수 있도록 돕는다. 
  • 이벤트에 대해서 조건 처리하거나, 조합하거나 오류를 처리 해 비동기 연산의 효율성을 높여준다. 

 

 

 

 

 

 

2. 방식

 

(1). Observer 방식

- Observer 인터페이스를 구현한 객체를 subscribe해서 소비자를 추가한다. (subscribe의 return type은 Unit이다)

 

(2). Consumer 방식

- 각각의 Consumer를 subscribe해서 소비자를 추가한다.(subscribe의 return type은 Disposable이다)

 

 

 

 

 

 

 

3. 변수

 

(1). Observable : 데이터의 변화가 발생하는 데이터 소스( 현재는 보이지 않지만 앞으로 보일 가능성을 의미 )

- 0개에서 n개의 데이터를 전달하는 생산자

- 기본적인 생산자로 0이나 1이 아니면 대부분 Observable을 씀

- observer 방식으로 consumer 등록시 observer를 구현해 전달한다.

- consumer 방식을 사용할 시, onNext(Observable이 데이터의 발행을 알림), onComplete, onError, onSubscribe가 있다.

 

 

  * Hot Observable : 구독자의 존재여부와 관계없이 데이터를 발행하는 Observable로,  Observable에서 방향하는 데이터를 처음부터 모두 수신하는 것을 보장할 수 없다 (구독한 시점부터 발행한 값을 받음) -> 마우스 이벤트, 키보드 이벤트 등, 대량으로 데이터가 발생했을 때 '배압(발행하는 데이터보다 구독하는 속도가 느려지는 경우)'을 고려해야 한다.

 

  * Cold Observable : 구독하면 준비된 데이터를 처음부터 발행 -> 웹 요청, 데이터베이스 쿼리와 파일 읽기 등

 ( Hot Observable 객체로 변환하는 방법은 Subject 객체를 만들거나 ConnectableObservable 클래스를 활용)

 

 

(2). Single

- 오직 1개의 데이터를 전달하는 생산자이다. ( => 일회성 데이터 흐름)

- Http GET Request와 같이 결과가 1개의 데이터 or 실패인 경우 사용한다.

- observer 방식으로 consumer 등록시 SingleObserver를 구현해 전달한다.

- consumer 방식을 사용할 시 onSuccess와 onError만 있다.

 

 

(3). Completable

- 0개의 데이터를 전달하는 생산자다

- db에 insert, update와 같이 데이터가 필요업이 성공 or 실패인 경우 사용한다.

- observer 방식으로 consumer 등록시 CompletableObserver를 구현해 전달한다.

- consumer 방식을 사용할 시 onComplete와 onError만 있다

 

 

(4). Maybe ( Hot Observable )

- 0개 또는 1개의 데이터를 전달하는 생산자다.

- 예 / 아니오 선택과 같이 (둘 중 하나 + 예외 경우)에 쓸 수 있다.

- observer 방식으로 consumer 등록시 MaybeObserver를 구현해 전달한다.

- consumer 방식을 사용할 시 onSuccess, onComplete와 onError가 있다.

 

 

(5). Flowable

- 데이터의 발행 속도가 구독자의 처리속도보다 크게 빠를 때 사용, 연속적으로 데이터가 흐르는 스트림을 생성한다.

- observer 방식으로 consumer 등록시 FlowableSubscriber를 구현해 전달한다.

- BackPressure Issue를 처리하는 방법을 설정할 수 있다.

- LiveDataReactiveStreams을 사용해 AAC LiveData와 연계할 수 있다.

 

 

(6). Subjects

 

- Observable과 Observer의 성격을 둘 다 가지고 있어서 subscribe를 달 수 있으며 동시에 onNext, onComplete 등을 달 수 있다.

- Cold Observable -> Hot Observable 으로 바꿔준다. 

- PublishSubject : 가장 평범한 Subject 클래스로, 구독자가 subscribe() 함수를 호출하면 값을 발행하기 시작한다.

 

 

 

(7). Disposable

- 여러 이유로 작업을 취소해야할 수 있다. 이때 Disposable을 dispose()함으로 작업을 취소할 수 있다.

- 여러 Disposable들을 일일히 dispose하면 귀찮으므로 CompositeDisposable을 사용한다.

- 기본적으로 add로 disposable을 등록하고, clear로 등록된 작업을 취소한다.

 

 

 

 

 

 

 

 

 

 

4. 함수

 

- just() : 인자로 넣은 데이터를 차례로 발행하고 Observable을 생성,  onNext, onComplete, onError와 같은 함수를 만들지 않아도 쉽게 동작함

- subscribe() : 내가 동작시키기 원하는 것을 사전에 정의해둔 다음 그것이 실행되는 시점을 조절할 때 사용

- create() : onNext, onComplete, onError 같은 알림을 직접 호출해야함. -> 쓸 때 주의 해야 함. 

- 람다 표현식을 활용하여 Obserbable.create()를 호출할 때 불필요한 익명 객체나 멤버 변수를 기재하지 않고 꼭 필요한 변수만 작성하므로, 가독성을 높임

- fromArray() : 배열에 들어있는 데이터를 처리할 때 사용( 단일데이터가 아닐때는 from~~() 함수를 사용해야한다. )

- fromCallable() : 동시성 API인 Callable 인터페이스

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

https://github.com/ReactiveX/RxJava

 

GitHub - ReactiveX/RxJava: RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based p

RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM. - GitHub - ReactiveX/RxJava: RxJava – Reactive E...

github.com

 

 

 

https://reactivex.io/documentation/observable.html

 

ReactiveX - Observable

Observable In ReactiveX an observer subscribes to an Observable. Then that observer reacts to whatever item or sequence of items the Observable emits. This pattern facilitates concurrent operations because it does not need to block while waiting for the Ob

reactivex.io

 

728x90
반응형