ReactiveX - Intro

ReactiveX

ReactiveX는 관찰 가능한 시퀀스를 사용하여 비동기 및 이벤트 기반 프로그램을 구성하기 위한 라이브러리입니다.

데이터 또는 이벤트 시퀀스를 지원하기 위해 관찰자 패턴을 확장하고 저수준 스레딩, 동기화, 스레드 안전, 동시 데이터 구조 및 비차단 I/O와 같은 것들에 대한 우려를 추상화하면서 시퀀스를 선언적으로 함께 구성할 수 있는 연산자를 추가합니다.

Observables는 여러 항목의 비동기 시퀀스에 접근하는 이상적인 방법으로 격차를 메웁니다.

단일 항목(single items) 다중 항목(multiple items)
동기(synchronous) T getData() Iterable<T> getData()
비동기(asynchronous) Future<T> getData() Observable<T> getData()

때때로 ***함수형 반응형 프로그래밍(Functional Reactive Programming)***이라고 불리지만 이는 잘못된 명칭입니다. ReactiveX는 함수형일 수도 있고 반응형일 수도 있지만, “Functional Reactive Programming”은 아예 다른 종입니다. 한 가지 주요한 차이점은 Functional Reactive Programming은 시간이 지남에 따라 지속적으로 변화하는 값에서 동작하는 반면, ReactiveX는 시간이 지남에 따라 방출되는 분리된 값에서 작동한다는 것입니다. (FRP에 대한 더 정확한 정보는 Conal Elliott의 작업을 참조해주세요.)

Observables를 사용하는 이유?

ReactiveX Observable 모델을 사용하면 배열같은 데이터 항목 컬렉션에 사용하는 것과 동일한 종류의 간단한 작업으로 비동기 이벤트 스트림을 처리할 수 있다. 그것은 ***“얽힌 콜백 거미줄 문제”***에서 우리를 해방시켜주고, 코드를 더 읽기 쉬우면서 버그에는 덜 취약하게 만들어줍니다.

Observables는 구성 가능합니다. (Composable)

Java Futures와 같은 기술은 단일 수준의 비동기 실행에서는 사용하기 쉽지만, 중첩될수록 점점 복잡해지기 시작합니다.

조건부 비동기 실행 플로우를 최적으로 구성하기 위해 Futures를 사용하는 것은 어렵습니다. (또는 각 요청의 대기 시간이 런타임 별로 다르기 때문에 불가능합니다.) 물론 할 수는 있지만, 빠르게 복잡해지거나(따라서 오류가 발생하기 쉬워짐) 비동기 실행의 이점을 제거하는 Future.get() 에서 조기에 차단됩니다.

반면에 ReactiveX Observables는 비동기 데이터의 흐름과 시퀀스를 구성하기 위한 것입니다.

Observables는 유연합니다. (Flexible)