이번에 리액티브 프로그래밍을 공부하다가, 이런 용어들이 나왔다.
중간에 흐름을 조절해 준다는 역할을 한다고 하는데, 이해가 잘 되지 않아 일단 정리해 보고 넘어가려 한다.
우선 이해하기 쉽게 그림이다.
- Publisher
Publisher가 Subscriber를 Subscribe한다.
Publisher는 request를 받으면 데이터를 생성하여 보낸다.
- Subscriber
Subscriber가 Subscription을 onSubscribe 한다.
Subscriber는 필요할 때 Subscribe의 request를 통해 Publisher에게 데이터를 요청한다.
Subscriber는 onNext로 데이터를 받는다.
- Subscription
Subscription은 Subscriber에 의해 등록된다.
모든 요청이 성공적으로 완료된다면 onComplete를, 요청이 실패하면 onError를 호출하고 흐름을 종료한다.
당연히 Publisher는 여러 개의 Subscriber를 Subscribe 가능하다.
하나씩 살펴보자
Publisher
@FunctionalInterface
public static interface Publisher<T> {
public void subscribe(Subscriber<? super T> subscriber);
}
하나의 메서드 밖에 없다.
subscribe로 Subscriber를 등록하면 된다.
Subscription
public static interface Subscription {
public void request(long n);
public void cancel();
}
- requst
Subscriber가 데이터를 처리 가능 할 때 request를 호출한다.
파라미터 n은 Publisher에게 요청하는 데이터의 개수이다.
- cancel
Publisher에게 데이터를 그만 보내라고 요청하는 메서드이다.
Subscriber
public static interface Subscriber<T> {
public void onSubscribe(Subscription subscription);
public void onNext(T item);
public void onError(Throwable throwable);
public void onComplete();
}
- onSubscribe
Subscription을 파라미터로 받아 request를 호출한다.
Subscription의 request를 호출하는 것은 온전히 Subscriber의 결정이며, 호출되기 전까지는 어떤 데이터도 흐르지 않는다.
- onNext
Publisher가 보낸 데이터이다.
- onError
에러로 종료
- onComplete
성공적으로 종료
'백엔드 > 리액티브 프로그래밍' 카테고리의 다른 글
HotPublisher 구현 (0) | 2024.03.13 |
---|---|
ColdPublisher 구현 (0) | 2024.03.13 |
CompletableFuture를 사용한 성능튜닝 (0) | 2024.03.06 |
CompletableFuture 인터페이스 (1) | 2024.03.06 |
CompletionStage 인터페이스 (1) | 2024.03.05 |