Page 22 -
P. 22

다만 예제 1-6은 Subscription의 처리가 Subscriber 외부에서는 호출되지 않는다는 것을 전
               제로 구현할 수 있습니다. 하지만 RxJava처럼 외부에서 구독을 해지할 방법을 제공한다면
               Subscription이 비동기로 호출돼도 문제가 없게 구현해야 합니다.

               추가로 Reactive Streams에 Processor라는 인터페이스가 있습니다. 이 Processor는 Publisher
               와 Subscriber 모두를 상속받아 데이터 통지와 수신이 가능합니다. 즉, Processor는 다른
               Publisher를 구독하거나 다른 Subscriber가 자신을 구독하게 할 수 있습니다.





               1.2.3 Reactive Streams의 규칙


               Reactive Streams는 앞서 소개한 인터페이스로 데이터를 통지하는 구조를 제공합니다. 하지만
               이 구조가 제대로 작동하려면 Reactive Streams의 규칙을 따라야 합니다. 어떤 규칙이 있는지는
               Reactive Streams GitHub에 있는 README.md에서 확인할 수 있습니다.


                 ●   reactive-streams-jvm/README.md https://github.com/reactive-streams/reactive-
                    streams-jvm/blob/master/README.md

               Reactive Streams의 기본 규칙은 다음과 같습니다.


                 ●   구독 시작 통지(onSubscribe)는 해당 구독에서 한 번만 발생한다.
                 ●   통지는 순차적으로 이루어진다.

                 ●   null을 통지하지 않는다.
                 ●   Publisher의 처리는 완료(onComplete) 또는 에러(onError)를 통지해 종료한다.

               Reactive Streams에서 구독 시작 통지는 해당 구독에서 한 번만 수행됩니다. 따라서 Subscriber
               의 onSubscribe 메서드는 구독을 시작해 통지 준비가 끝났을 때 한 번만 실행됩니다. 단, 다음 작

               업은 추천하지 않지만, 처리가 종료된 후에 같은 Publisher와 Subscriber로 subscribe 메서드
               를 호출하면 다시 onSubscribe 메서드가 실행됩니다. 이는 처리가 끝난 뒤에 subscribe 메서드를
               호출하면 새로운 구독을 시작한다고 생각하기 때문입니다. 그러나 같은 인스턴스를 다시 사용해

               subscribe 메서드를 호출할 때 Publisher나 Subscriber 내부의 관리 상태를 초기화하지 않으면
               의도하지 않은 결과가 발생할 수도 있으므로 주의해야 합니다.

               또한, Reactive Streams에서는 데이터 통지가 순차적으로 이루어집니다. 즉, 여러 통지를 동시
               에 할 수 없습니다. 이는 Reactive Streams 사양에 큰 영향을 미친 RxJava의 ‘Observable 규약


         030





     RxJava 리액티브 프로그래밍(본문)최종.indd   30                                                      2019-03-26   오전 11:26:31
   17   18   19   20   21   22   23   24   25   26   27