Android/RxJava
Android RxJava - Reactive Programming
강태종
2022. 2. 28. 19:45
Reactive Programming
데이터의 흐름을 먼저 정의하고 데이터가 반영되었을 때 연관된 작업이 실행횐다. 즉, 이벤트에 반응하여 프로그램이 동작한다.
어떻게 이벤트를 반응할까?
- Observer 패턴 (이벤트 처리)
- Iterator 패턴 (이벤트 처리)
- Functional 프로그래밍 (이벤트 가공)
RxJava
https://reactivex.io/intro.html
ReactiveX is a library for composing asynchronous and event-based programs by using observable sequences.
It extends the observer pattern to support sequences of data and/or events and adds operators that allow you to compose sequences together declaratively while abstracting away concerns about things like low-level threading, synchronization, thread-safety, concurrent data structures, and non-blocking I/O.
- ReactiveX는 관찰 가능한 절차를 통해 비동기, 이벤트 기반 프로그램을 구성하기 위한 라이브러리이다.
- Observer Pattern을 확장하며, Sequence를 조합할 수 있는 연산자를 지원한다.
- low-level Thread, 동기화, Thread-Safety, Non-Blocking IO를 쉽게 처리할 수 있다.
기본 구성
class RxJavaExample {
fun start() {
Observable.just(1, 2, 3, 4)
.map {
it * 100
}
.subscribe {
Log.d("RxJavaTAG", it.toString())
}
}
}
- Observable : RxJava의 핵심 요소이다. 관측 가능하며 데이터를 Consumer에게 보내는 역할을 한다. Single, Maybe 등이 있다.
- Operator : 데이터를 원하는 형태로 바꾸는 역할을 한다. map, filter 등 Collection에 쓰이는 연산자와 debounce 등 Rx에 쓰이는 연산자가 있다.
- Observer : Observable를 관측하여 데이터를 소비하는 역할을 한다. Consumer 형태로 하나의 함수를 가진 인터페이스를 람다로 만들 수 있고, Observer를 상속 받아서 만들 수도 있다.
Diagram
RxJava를 공부하면 Diagram을 많이 보게 되는데 Operator를 도형으로 쉽게 설명해준다. 선언부의 주석으로 확인하거나 아래 사이트에 서 쉽게 볼 수 있다.
filter 연산자로 10보다 큰 데이터만 불러온다.
- 가로 실선 : 타임라인
- 모형 : Observable에서 발행하는 데이터
- 세로 실선 : 완료를 의미한다.
- 가운데 박스 : 연산자를 의미하여 데이터가 가공된다.