📘 Publisher, Subscriber, Subscription
리액티브 프로그래밍에서 Publisher, Subscriber, Subscription은 데이터 스트림의 핵심 구성 요소로, 각각 데이터의 생산자, 소비자, 그리고 두 요소 간의 관계를 관리하는 역할을 합니다.
PublisherPublisher는 데이터 항목들을 생성하고 발행하는 역할을 담당합니다. Publisher는 하나 이상의 Subscriber에게 데이터 스트림을 제공합니다.
public interface Publisher<T> {
void subscribe(Subscriber<? super T> subscriber);
}
Publisher는 subscribe 메서드를 통해 Subscriber를 받아들입니다. Subscriber가 Publisher에 구독할 때 이 메서드가 호출됩니다.SubscriberSubscriber는 Publisher로부터 데이터를 수신하며, 리액티브 스트림의 데이터 처리를 담당합니다. Subscriber는 다음과 같은 네 가지 메서드를 구현합니다:
public interface Subscriber<T> {
void onSubscribe(Subscription subscription);
void onNext(T item);
void onError(Throwable throwable);
void onComplete();
}
onSubscribe: Publisher에 구독할 때 호출되며, Subscription 객체를 통해 데이터 요청 및 구독 취소를 관리합니다.onNext: Publisher로부터 새 데이터 항목을 받을 때 호출됩니다.onError: 데이터 처리 중 발생한 에러를 처리합니다.onComplete: 데이터 스트림이 완료되었음을 알립니다.SubscriptionSubscription은 Publisher와 Subscriber 간의 계약을 나타내며, 데이터의 흐름을 제어합니다.
public interface Subscription {
void request(long n);
void cancel();
}
request: Subscriber가 처리할 수 있는 데이터의 양을 Publisher에 요청합니다.cancel: Subscriber가 더 이상 데이터를 받고 싶지 않을 때 구독을 취소합니다.위 객체들을 리액티브 프로그래밍에서 데이터의 흐름과 처리를 효과적으로 관리하는 객체로 Publisher를 통해 데이터를 발행하며 Subscriber는 이 데이터를 받아 처리하고, Subscription은 이 두 요소 간의 상호작용을 조절합니다.