Reactive Programming 이란 데이터 흐름과 전달에 관한 프로그래밍 패러다임이다.
우리는 주로 알고리즘 문제와 같이 절차를 명시하여 순서대로 실행되는 Imperative Programming(명령형 프로그래밍)을 한다. 반면 Reactive Programmgin이란 데이터의 흐름을 먼저 정의하고 데이터가 변경되었을 때 연관된 작업이 실행된다. 즉 프로그래머가 어떠한 기능을 직접 정해서 실행하는 것이 아닌, 시스템에 발생했을 떄 알아서 처리되는 것이다.
기존의 프로그래밍 방식을 Pull 방식, Reactive 프로그래밍 방식을 Push 방식이라고도 한다. Pull 방식은 데이터를 사용하는 곳 (Consumer)에서 데이터를 직접 가져와서 사용한다면, Push 방식은 뎅이터의 변화가 발생한 곳에서 새로운 데이터를 Consumer에게 전달한다.
따라서 Reactive 프로그래밍은 주변 환경과 끊임없이 상호작용을 한다. 다만 프로그램이 주도하는 것이 아니라 환경이 변하면 이벤트를 받아 동작함으로써 상호작용을한다.
RxJava는 ReactiveX의 Java 언어 라이브러리
RxJava는 러닝 커브가 가파르다. 전통적인 스레드 기반의 프로그래밍을 사용하는 자바와 접근 방식이 다르기 때문이다. 여러 스레드를 사용하는 경우 예상치 못한 문제가 발생할 수도 있고 디버깅 하기도 어렵다.
따라서 RxJava는 함수형 프로그래밍 방식을 도입하였다. 함수형 프로그래밍은 Side Effect가 없는 순수 함수를 지향하기 때문에 Thread-Safe하다.
ReactiveX의 이러한 방식을 구성하게 해주는 핵심 요소가 바로 Observable과 Operator
Marble Diagram은 ReactiveX을 이해하는 핵심 도구입니다.
아래는 Marble Diagram이 어떻게 Observable과 Observable의 전환을 표현하는지 보여준다.(이후 포스트에 다루는 Observable Marble Diagram)
예제를 해석하면, ★, ▼, .., ◆ 데이터가 차례로 들어와 ◆ 이후 데이터 발행이 완료되었다.
각 데이터는 flip 연산자를 거쳐 새롭게 변환되었으며(▼ -> ▲),
초록색 오각형 이후 어떠한 오류로 인해 데이터 발행이 비정상적으로 종료되었다.
예제를 해석하면 ● 데이터 카운터 2개를 모아서 List 객체에 전달하고 3번째는 스킵합니다.