-
[Android] RxJavaAndroid 2021. 8. 28. 10:39728x90
ReactiveX
ReactiveX는 Observer 패턴과 함수형 프로그래밍을 사용하여 비동기 프로그래밍을 가능케 한다.
관찰 가능한 1) Observable stream 이 있고, 2) operator 순수함수로 가공을 하여 발행하면 3) Observer가 반응해 작업을 실행한다.
- RxJava: Java(JVM)를 위한 ReactiveX Extensions. Reactive programming(리액티브 프로그래밍) 패러다임을 자바에서 구현한 프로그래밍 라이브러리
- RxKotlin: Kotlin을 위한 ReactiveX Extensions. RxJava 라이브러리를 기반으로 포팅하여 코틀린을 위한 리액티브 프로그래밍의 특정 부분을 함수형 프로그래밍으로써 구현한 라이브러리
- RxAndroid: Android를 위한 ReactiveX Extensions. RxJava에 최소한의 클래스를 추가하여 안드로이드 앱에서 리액티브 구성요소를 쉽고 간편하게 사용하게 만드는 라이브러리
- 장점
- 효율적으로 신속하게 비동기 처리를 도와줌
- 함수형 프로그래밍을 일부 지원함
- 옵저버패턴(Observer pattern)을 사용함
- 콜백(Callback)에서 또 콜백을 하는 콜백 지옥에서 벗어날 수 있다.
- 단점
- 러닝커브가 가파르기 때문에 진입장벽 높다
Observable
Observable은 데이터 흐름에 맞게 알림을 보내 Observer가 데이터를 사용할 수 있도록 한다. 즉, Observable을 이용해 데이터를 회수하고 변환하는 메커니즘을 정의하고, Observer는 이를 구독해 데이터가 준비되면 이에 반응한다.
- Observable이 데이터 스트림을 처리하고, 완료되면 데이터를 발행(emit)한다.
- 데이터를 발행할 때마다 구독하고 있는 모든 Observer가 알림을 받는다.
- Observer는 수신한 데이터를 가지고 어떠한 일을 한다.
※ 스트림 : 2021.08.28 - [JAVA] - [Java 8] Stream
Observable 외에도 총 5가지의 클래스가 있다
- Observable
- Single
- Maybe
- Completable
- Flowable
Disposable
- subscribe()를 호출한 후에는 Disposable 객체가 반환된다.
- Observable이 발행하는 아이템의 개수가 정해져 있다면 모두 발행된 이후 onComplete()가 호출되고 안전하게 종료될 것이다. 하지만 아이템을 무한히 발행하거나 오랫동안 실행되는 Observable의 경우에는 제대로 종료해주지 않는다면 메모리 릭이 발생할 수 있다.
- 더 이상 옵저버블의 구독이 필요하지 않을 때에는 이를 폐기(dispose)하는 것이 효율적이다. Disposable.dispose()를 호출해서 언제든지 아이템의 발행을 중단할 수 있다.
참고
- https://thdev.tech/android/2019/11/30/RxJava-Corotuines-01/
- https://velog.io/@jojo_devstory/Android-RxKotlin-RxAndroid%EB%9E%80-Reactive-Programing
- https://4z7l.github.io/2020/12/03/rxjava-2.html#observable%EC%9D%B4%EB%9E%80
728x90'Android' 카테고리의 다른 글
[Android] MVC vs MVP vs MVVM (0) 2021.08.29 [Android] Android HTTP 통신 (Retrofit, HttpUrlConnection) (0) 2021.08.28 [코루틴] 코틀린(Kotlin)의 코루틴(Coroutine) (0) 2021.08.27 [코루틴] 코루틴(Coroutine) 이란 (0) 2021.08.22 Android Developer Roadmaps 2020 (0) 2020.12.05