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, filterCollection에 쓰이는 연산자debounceRx에 쓰이는 연산자가 있다.
  • Observer : Observable를 관측하여 데이터를 소비하는 역할을 한다. Consumer 형태로 하나의 함수를 가진 인터페이스를 람다로 만들 수 있고, Observer를 상속 받아서 만들 수도 있다.

Diagram

RxJava를 공부하면 Diagram을 많이 보게 되는데 Operator를 도형으로 쉽게 설명해준다. 선언부의 주석으로 확인하거나 아래 사이트에 서 쉽게 볼 수 있다.

https://rxmarbles.com/#filter

Diagram

filter 연산자로 10보다 큰 데이터만 불러온다.

 

  • 가로 실선 : 타임라인
  • 모형 : Observable에서 발행하는 데이터
  • 세로 실선 : 완료를 의미한다.
  • 가운데 박스 : 연산자를 의미하여 데이터가 가공된다.