Page 23 -
P. 23

5
                    (Observable contract)’ 이라는 규칙에 따른 것으로, 데이터가 동시에 통지돼 불일치가 발생하는 것
                    을 방지합니다.

                    그리고 Reactive Streams에서는 null을 통지할 수 없습니다. 만약 null을 통지하면 Reactive                  1
                    Streams에서 NullPointerException이 발생합니다. 이는 데이터를 통지할 때만 아니라 에러를 통
                    지할 때도 마찬가지입니다. 이 “null을 통지하지 않는다”라는 사양은 RxJava 1.x 버전과 다른 사                       RxJava의 기본
                    양이므로 RxJava 1.x 버전의 프로그램을 RxJava 2.x 버전으로 전환할 때는 주의해야 합니다.

                    마지막으로 Reactive Streams에서는 완료나 에러를 통지하면 Publisher가 처리를 끝마친 것으

                    로 판단합니다. 이는 완료나 에러 통지를 마친 구독은 더 이상 통지하지 않는다는 의미입니다. 예
                    를 들어, 완료를 통지한 뒤에 에러가 발생했다면 이 에러는 통지하지 않으므로 정상적으로 종료됐
                    다고 생각할 위험성이 있습니다.

                    추가로 데이터 개수 요청이나 구독 해지를 수행하는 Subscription은 다음과 같은 규칙이 있습니다.

                       ●   데이터 개수 요청에 Long.MAX_VALUE를 설정하면 데이터 개수에 의한 통지 제한은 없어진다.

                       ●   Subscription의 메서드는 동기화된 상태로 호출해야 한다.

                    Reactive Streams에서 Long.MAX_VALUE를 데이터 개수 요청으로 지정하면 통지할 데이터 개수의
                    제한이 없어집니다. 그러므로 이 요청을 전송한 후에는 데이터 개수 요청을 보내지 않아도 데이터
                    통지를 계속해서 받을 수 있습니다.

                    또한, 요청받은 데이터 개수가 남은 상태에서 추가로 데이터 개수를 요청받으면 새로 요청받은 데

                    이터 개수가 기존 데이터 개수에 추가된다는 점을 주의해야 합니다. 즉, 데이터 개수 요청을 받
                    을 때마다 기존 개수에 더해져 통지 가능한 데이터 개수가 증가합니다. 그래서 이 더해진 결과가
                    Long.MAX_VALUE에 도달하면 통지 가능한 데이터 개수 제한이 없어집니다.

                    그리고 Subscription의 메서드는 동기화된 상태로 호출해야 합니다. 즉, Subscription의 메서드
                    를 동시에 호출해서는 안 됩니다.

                    앞의 규칙 이외에도 Reactive Streams에는 세세한 규칙이 있으나 이러한 규칙들은 여기에서
                    소개한 규칙에 따라 구현하면 자동으로 지켜집니다. RxJava를 사용할 때는 각 통지 메서드와
                    Subscription의 메서드를 호출할 때 동기화가 이뤄지므로 처리 자체가 스레드 안전(thread safety)

                    한지를 특히 신경 써야 합니다. 이 부분이 제대로 처리되지 않으면 정확한 통지가 안 될 가능성이
                    큽니다.


                    5   역주  Observable 규약이란 ReactiveX의 Rx.NET을 설명하는 Rx Design Guidelines에서 비롯됐으며, Observable을 공식적으로 정
                       의한 규칙입니다(참고 URL: http://reactivex.io/documentation/contract.html).
                                                                                                  031





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