1. Publisher 인터페이스
subscribe 메서드를 통한 Subscriber를 등록하는 역할을 담당한다.
public interface publisher<T> {
public void subscribe(Subscriber<? super T> s);
}
2. Subscriber 인터페이스
일단 해당 컴포넌트에 정의된 메서드들부터 살펴보자.
public interface Subscriber<T>{
public void OnSubscribe(Subscription s);
public void onNext(T t);
public void onError(Throwable t);
public void onComplete();
}
onSubscribe 메서드는 구독 시작 시점에 어떤 처리를 하는지 정의하는 역할을 한다.
onNext 메서드는 Publisher가 통지한 데이터를 처리하는 역할을 한다.
onError 메서드는 Publisher가 데이터 통지를 위한 처리 괒어에서 에러가 발생했을 때 해당 에러를 처리하는 역할을 한다.
onComplete 메서드는 Publisher가 데이터 통지를 완료했음을 알릴 때 호출되는 메서드이다. 만일 데이터 통지가 정상적으로 완료되고 나서 후 처리를 해야한다면 onComplete 메서드에서 처리 코드를 작성하도록 한다.
3. Subscription 인터페이스
위 Subscriber가 구독한 데이터의 개수를 요청하거나 또는 데이터 요청의 취소, 즉 구독을 해지하는 역할을 한다.
public interface Subscription{
public void request(long n);
public void cancel();
}
request 메서드를 통해 데이터의 개수를 요청할 수 있으며, cancel 메서드를 통해 구독을 해지할 수 있다.
4. Processor 인터페이스
Processor의 경우 Publisher와 Subscriber의 기능을 모두 가지고 있다.
public interface Processor<T, R> extends Subscriber<T>, Publisher<R> {
}
Publisher와 Subscriber의 동작과정을 간략히 설명하면 아래와 같다.
1) Publisher가 Subscriber 인터페이스 구현 객체를 subscribe 메서드의 파라미터로 전달받는다.
2) Publisher 내부에서는 전달받은 Subscribr 인터페이스 구현 객체의 onSubscribe 메서드를 호출하게 되면서 Subscriber의 구독을 의미하는 Subscription 인터페이스 구현 객체를 Subscriber에게 전달한다.
3) 호출된 Subscriber 인터페이스 구현 객체의 onSubscribe 메서드에서 전달받은 Subscription 객체를 통해 전달받은 데이터의 개수를 Publisher에게 요청한다.
4) Publisher는 Subscriber로부터 전달받은 요청 개수만큼의 데이터를 onNext 메서드를 호출하여 Subscriber에게 전달한다.
5) Publisher는 통지할 데이터가 더 이상 없을 경우 onComplete 메서드를 호출하여 Subscriber에게 데이터 처리 종료를 알린다.
추가적으로 위의 Publisher, Subscriber, Subscription 인터페이스에 선언된 메서드들을 Signal이라고 한다.
onSubscribe, onNext, onError, onComplete 메서드들은 실제로 Subscriber 인터페이스에 정의되어 있지만, 이 메서드들을 실제로 사용하는 주체는 Publisher 인터페이스이므로 네 개의 메서드는 Publisher가 Subscriber에게 보내는 Signal이라고 할 수 있다.
또한, request, cancel 메서드는 Subscription 인터페이스에 정의되어 있지만, 이 메서드들을 실제로 사용하는 주체는 Subscriber이기 때문에 위 두 메서드는 Subscriber가 Publisher에게 보내는 Signal이라고 할 수 있다.