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
https://reactivex.io/documentation/observable.html
'안드로이드 스튜디오' 카테고리의 다른 글
[안드로이드 스튜디오] MVVM 패턴 (0) | 2022.05.24 |
---|---|
[안드로이드 스튜디오] Figma로 Layout 디자인하기 ! (1) | 2022.05.23 |
[안드로이드 스튜디오] Dagger2는 무엇인가? (0) | 2022.05.15 |
[안드로이드 스튜디오 코틀린] 쉬운 하단 바 네비게이션바 만들기 ( +자바 코드 추가) (8) | 2022.04.24 |
[안드로이드 스튜디오 코틀린] implementation 추가 하는 다양한 방법 (0) | 2022.04.17 |