리액티브 스트림은 리액티브 프로그래밍을 위한 명세이다. 비즈니스 시스템 개발자는 리액티브 스트림에 정의된 인터페이스를 구현하면, 리액티브 프로그래밍을 구현할 수 있다.

리액티브 스트림 인터페이스

리액티브 스트림의 인터페이스는 다음과 같다.


인터페이스 클래스 다이어그램

Untitled

아래는 리액티브 스트림에 정의되어있는 코드이다.

public interface Processor<T, R> extends Subscriber<T>, Publisher<R> {}

public interface Publisher<T> {

    public void subscribe(Subscriber<? super T> s);

}

public interface Subscriber<T> {

    public void onSubscribe(Subscription s);

    public void onNext(T t);

    public void onError(Throwable t);

    public void onComplete();

}

public interface Subscription {

    public void request(long n);

    public void cancel();

}

→ 리액티브 스트림은 명세를 정의할 뿐 실제로 구현체를 만들어 사용해야한다.

Untitled

Untitled

위 명세를 보면 알겠지만, 리액티브 스트림의 기본적 흐름은 다음과 같다.

  1. Subscriber가 Publisher에게 subscribe하면, Publisher가 데이터 또는 시퀀스를 전달하게 된다.
  2. 전달 전 Publisher는 Subscribe에 정의된 onSubscribe를 호출한다
  3. Subscriber는 Request를 호출한다
  4. Publisher는 데이터를 Subscriber에게 전달하고, onError() 혹은 onComplete를 호출한다.