리액티브 프로그래밍
리액티브 시스템에서 사용되는 프로그래밍 모델
- declarative programming paradigm : 리액티브 프로그래밍은 선언형 프로그래밍 방식을 사용하는 대표적인 프로그래밍 모델
- data streams and the propagation of change : 지속적으로 데이터가 입력으로 들어올 수 있으며 데이터가 지속적으로 발생하는 것 자체를 데이터에 어떤 변경이 발생함을 의미
- automatic propagation of the changed data flow : 지속적으로 발생하는 데이터를 하나의 데이터 플로우로 보고 데이터를 자동으로 전달
리액티브 스트림즈
리액티브 프로그래밍을 위한 표준 사양
Publisher
public interface Publisher<T> {
public void subscribe(Subscriber<? super T> s);
}
- Publisher : 인터페이스 데이터 소스로 부터 데이터를 내보내는(emit) 역할
Subscriber
public interface Subscriber<T> {
public void onSubscribe(Subscription s); // 구독이 시작되는 시점에 호출됨, publisher에게 요청할 데이터의 개수를 지정하거나 구독 해지 처리
public void onNext(T t); // publiser가 데이터를 emit할 때 호출, emit된 데이터를 전달받아서 소비
public void onError(Throwable t); // publisher로 부터 emit된 데이터가 subscriber에게 전달되는 과정에서 에러가 발생할 경우 호출
public void onComplete(); // publisher가 데이터를 emit하는 과정이 종료될 경우 호출, emit이 정상적으로 완료된 후 처리해야할 작업을 처리
}
- Subscriber : Publisher로 부터 내보내진 데이터를 소비하는 역할
Subscription
public interface Subscription {
public void request(long n); // publisher가 emit하는 데이터의 개수를 요청
public void cancel(); // 구독을 해지
}
- Subscription : 구독 자체를 표현하는 인터페이스
Processor
public interface Processor<T, R> extends Subscriber<T>, Publisher<R> {
}
- Processor : Subscriber와 Publisher 동시에 사용 가능
리액티브 프로그래밍 용어
- Publisher : 데이터를 내보내는 주체
- Emit : Publisher가 데이터를 내보내는 것
- Subscriber : publisher가 emit한 데이터를 전달 받아서 소비하는 주체
- Subscribe : 구독
- Sognal : publisher가 발생시키는 이벤트
- Operator : 리액티브 프로그래밍에서 어떤 동작을 수행하는 메서드
- Sequence : Operator 체인으로 표현되는 데이터의 흐름
- Upstream / Downstream : Operator를 기준으로 위쪽의 Sequence 일부를 Upstream / 아래쪽 Sequence 일부를 Downstream 이라고 표현