Page 18 -
P. 18

므로 통지를 시작할 수 없습니다.

               그다음 Publisher는 데이터를 만들어 Subscriber에 통지(onNext)합니다. 이 데이터를 받은
               Subscriber는 받은 데이터를 사용해 처리 작업을 수행합니다. Publisher는 요청받은 만큼의 데
               이터를 통지한 뒤 Subscriber로부터 다음 요청이 올 때까지 데이터 통지를 중단합니다. 이후
               Subscriber가 처리 작업을 완료하면 다음에 받을 데이터 개수를 Publisher에 요청합니다. 이 요청
               을 보내지 않으면 Publisher는 요청 대기 상태가 돼 Subscriber에 데이터를 통지할 수 없습니다.


                  그림 1-5 Publisher와 Subscriber의 시퀀스 다이어그램

                       Publisher                                         Subscriber
                                                               구독한다(subscribe)

                            생산자가 데이터를 통지할 준비가 됐음을 통지한다(onSubscribe)
                                    통지받을 데이터 개수(예를 들어 1건)를 요청한다(Subscription#request)
                                 데이터를 생성한다
                                 데이터를 통지한다(onNext)
                                 데이터를 생성한다

                                 데이터를 생성한다
                                            통지받을 데이터 개수를 요청한다(Subscription#request)
                            데이터를 통지한다(onNext)
                                 데이터를 생성한다                완료 또는 에러가
                                                          발생할 때까지
                생략                                        계속한다                      생략
                            완료를 통지한다(onComplete)






               Publisher는 Subscriber에 모든 데이터를 통지하고 마지막으로 데이터 전송이 완료돼 정상 종료
               됐다고 통지(onComplete)합니다. 완료 통지를 하고 나면 Publisher는 이 구독 건에 대해 어떤 통

               지도 하지 않습니다. 또한, Publisher는 처리 도중에 에러가 발생하면 Subscriber에 발생한 에러
               객체와 함께 에러를 통지(onError)합니다.

               Subscriber가 Publisher에 통지받을 데이터 개수를 요청하는 것은 Publisher가 통지하는 데이
               터 개수를 제어하기 위해서입니다. 예를 들어, Publisher와 Subscriber의 처리가 각각 다른 스레
               드에서 진행되는데 Publisher의 통지 속도가 빠르면 Subscriber가 소화할 수 없을 만큼 많은 처
               리 대기 데이터가 쌓입니다. 이를 막기 위해 Publisher가 통지할 데이터 개수를 Subscriber가 처

               리할 수 있을 만큼으로 제어하는 수단이 필요합니다.
         026





     RxJava 리액티브 프로그래밍(본문)최종.indd   26                                                      2019-03-26   오전 11:39:14
   13   14   15   16   17   18   19   20   21   22   23