RxJava란?

리액티브 프레임워크로 Reactive Extensions(=ReactiveX)의 자바 구현체이다. Reactive Extensions는 동기 또는 비동기 스트림과 관계없이 명령형 언어를 이용해 데이터 스트림을 조작할 수 있는 인터페이스이다.

ReactiveX는 관찰자 패턴, 반복자 패턴 및 함수형 프로그래밍의 조합으로 정의되어있다.

관찰자 + 반복자 = Reactive Stream

기존의 옵저버 패턴을 다시 떠올려보자. registerObserver, unregisterObserver, notifyObservers등의 메소드로 구성되어있던 옵저버 패턴은 무한한 데이터 스트림에 대해서는 잘 동작하나, 데이터 스트림의 끝을 알리는 기능이 없다. 또한 컨슈머가 준비하기 전에 프로듀서가 이벤트를 생성할 경우 해당 이벤트를 놓칠 수도 있다.

동기식으로 동작하는 경우 반복자 패턴은 이런 때를 대비하여 다음과 같이 코드를 작성하게된다.

public interface Iterator<T>{
	T next();
	boolean hasNext();
}

위 코드에서 stream을 하나씩 검색하여 시퀀스의 끝을 알려줄 수 있게 되었다.

RxObserver

public interface RxObserver<T>{
	void onNext(T next);
	void onComplete();
	void onError(Exception e);
}

RxObserver는 Interator와 비슷하지만 next()메서드 대신 onNext()콜백에 의해 RxObserver에 새로운 값을 넘겨주게 된다.

onComplete()메서드를 통해 스트림의 끝을 알리게된다. 또한 onError()를 통해 콜백 에러함수를 등록할 수 있다.

위의 인터페이스는 리액티브 스트림의 모든 컴포넌트 사이의 데이터가 흐르는 방법을 정의할 수 있다.

Observable

리액티브 Observable클래스는 관찰자 패턴의 주체(Subject)와 일치한다. 결과적으로 Observable은 이벤트를 발생시키는 이벤트 소스 역할을 수행하고, 다양한 리액티브 스트림 초기화 메서드, 스트림 변환 메서드를 제공한다.

Subscriber추상클래스는 Observer인터페이스를 구현하고, 이벤트를 소비한다. 실제 Subscriber 클래스 기본구현체로도 사용되며 런타임에 Observable과 Subscriber간은 메시지 구독상태를 확인하고 제어한다.