
리액티브 프로그래밍
선언형 프로그래밍 방식
메세지 기반 통신
Non-Blocking 통신을 위한 프로그래밍
지속적으로 데이터의 입력을 받으며, 하나의 데이터 플로우로서 데이터를 전달
MEANS: 리액티브 시스템에서 사용하는 커뮤니케이션 수단
FORM: 리액티브 시스템이 메세지 기반 통신을 통해 어떠한 구조로 형성되는지를 의미
VALUE: 리액티브 시스템의 핵심 가치가 무엇인지 표시하는 영역
Responsive: 클라이언트의 요청에 즉각적으로 응답할 수 있음을 의미
Maintainalbe: 클라이언트의 요청에 대한 즉각적인 응답이 지속 가능해야 함을 의미
Extensible: 클라이언트의 요청에 대한 처리량을 자동으로 확장하고 축소할 수 있어야 함을 의미
리액티브 프로그래밍을 위한 표준 사양
Publisher, Subscriber, Subscription, Processor
public interface Publisher<T> {
public void subscribe(Subscriber<? super T> s); //(1)
}
(1): 데이터를 수신할 지 여부를 결정하는 구독의 의미
public interface Subscriber<T> {
public void onSubscribe(Subscription s); //(1)
public void onNext(T t); //(2)
public void onError(Throwable t); //(3)
public void onComplete(); //(4)
}
(1): 구독이 시작되는 시점에 호출되며, onSubscribe() 내에서 Publisher에게 요청할 데이터의 개수를 지정하거나 구독 해지 처리
(2): Publisher가 데이터를 emit할 때 호출되어, emit된 데이터를 전달받아 소비
(3): emit된 데이터가 전달되는 과정에서 에러가 발생하는 경우에 호출
(4): emit 과정이 종료되는 경우 호출되며, 정상적으로 완료된 후 처리할 작업이 있으면 onComplete()내에서 수행
public interface Subscription {
public void request(long n); // (1)
public void cancel(); // (2)
}
(1): emit하는 데이터의 개수를 요청
(2): 구독을 해지하여 emit을 종료
public interface Processor<T, R> extends Subscriber<T>, Publisher<R> {
}
Project Reactor, RxJava, JavaFlowAPI, 기타 리액티브 확장(Reactive Extension)