반응형 스트림 Flow API
- 핵심 Interface
- Flow.Publisher
- 데이터를 생성하기 위한 항목과 처리 신호를 정의한다.
- Flow.Subscriber
- 데이터를 수신하기 위한 항목과 처리 신호를 정의한다.
- Flow.Subscription
- 위의 Publisher와 Subscriber의 상호 연결을 정의한다.
- Publisher와 Subscriber 사이에서 메시지를 중개하는 역할.
- Flow.Processor<T, R>
- Publisher와 Subscriber간에 주고받는 데이터를 변환하고 싶을 때 이용한다.
- SubmissionPublisher<T>
- Flow.Publisher<T>의 하위 인터페이스로 반응형 스트림에 대응한다.
- 개념
- Publisher(출판사)
- 메시지를 제공하는 역할
- 흐름의 시작 지점에 해당하며 해당 메시지를 받을 Subscriber를 등록하기 위한 메서드를 제공한다.
- 반드시 Publisher 인터페이스를 구현해야 한다.
- Subscriber(독자)
- Publisher에 메시지를 요청하고 수신 받는 역할을 한다.
- 구현하기위해서 반드시 Subscriber 인터페이스를 구현해야 한다.
- Publisher가 생성한 데이터를 Subscriber가 받아서 처리하면 최종적으로 데이터의 흐름은 종료된다.
- Processor
- Publisher에서 메시지를 수신 받아서 변환한 후 Subscriber에 전달한다.
- 메시지를 수신하고 전달하는 역할을 하기 때문에 Publisher와 Subscriber의 특징을 모두 가지고 있다.
- Subscriber
- 메서드
- onSubscribe
- 최초 Publisher에 등록되었을 때 호출된다.
- 등록되었을 때 Subscriber의 초기 설정 작업을 하거나 기록에 남기는 등의 작업을 정의한다.
- onNext
- 메시지를 수신 받았을 때 호출된다.
- 10개의 메시지를 순신 받았다면 메시지가 10번 호출된다.
- 메시지 수신이 끝날 때까지 계속 호출된다.
- onError
- Publisher에 오류가 발생했을 때 호출된다.
- 이 메서드가 호출되면 Subscriber는 종료된다.
- onComplete
- 메시지 수신이 종료되고 더 이상 수신이 없을 때 호출된다.
- 에러가 발생하지 않은 상태에서 정상 종료되었음을 의미한다.
- Publisher
- 메서드
- subscribe
- Publisher와 Subscriber의 중간 연결 역할을 하는 Subscription을 정의한다.
- subscribe메서드로 전달된 Subscriber 객체를 Publisher에 등록하고, Publisher에서 관히고 있는 Subscription객체를 Subscriber에 전달한다.
- 이 과정은 Subscription을 기준으로 Publisher와 Subscriber의 관계를 정의하고 프로그램이 종료할 때까지 연결을 유지하는 역할을 한다.
- Subscription
- 메서드
- request
- Subscriber가 Publisher에 메시지를 전달해 달라고 요청할 때 사용한다.
- cancel
- Subscriber가 Publisher에 더 이상 메시지를 수신하지 않겠다고 알릴때 사용한다.
- Processer