Page 31 -
P. 31

실행 결과를 보면 실행하는 도중에 계산 방법이 덧셈에서 곱셈으로 변경됐습니다. 이것이 원래는
                    덧셈으로만 계산할 생각이었고, 이 계산을 마친 뒤에 계산 방법을 바꾸려고 한 것이라면 실제 결
                    과는 의도한 대로 되지 않았습니다. 여기서는 직접 처리하는 도중에 외부 변수를 바꾸고 있으므로                              1

                    실제로는 이런 일이 일어나지 않는다고 생각할지도 모릅니다. 하지만 비동기 처리 도중에 외부 변
                    수를 참조한다면 프로그램이 복잡해질수록 의도하지 않게 이런 일이 일어날 위험이 커집니다.                                 RxJava의 기본
                    그래서 비동기로 처리할 때는 생산자에서 소비자까지의 처리가 노출되지 않게 폐쇄(closed)적으

                    로 개발하면 어느 정도 위험을 줄일 수 있습니다. 기본적으로는 생산자가 외부에서 데이터를 받아
                    데이터를 생성할 때와 소비자가 받은 데이터를 처리하고 이를 외부에 반영할 때만 외부 데이터를
                    참조하는 것이 좋습니다.

                       그림 1-8 외부 접근으로부터 안전한 비동기 처리 방식

                                                              외부 데이터는 생산자(Flowable/Observable)
                                                              에서 받아온다




                                                       Flowable/Observable
                                      외부
                       스레드 1                          데이터
                                  데이터
                                        데이터
                                                                                   외부에서
                                                                                   접근 불가
                                                           연산자
                                            새로운 데이터
                               스레드 2        생성                  데이터                외부
                                                       신규 데이터
                           연산자 외부에서는 데이터에
                           접근할 수 없다
                                                       Subscriber/Observer         외부
                                     스레드 3
                                                                신규 데이터         신규 데이터




                               외부에 데이터를 반영하는 것은
                               소비자(Subscriber/Observer)에서 한다


                    단, 소비자가 받은 데이터를 외부에 반영할 때도 반영하는 대상에 다른 프로그램에서 접근하지 않

                    는지도 주의해야 합니다.





                                                                                                  039





     RxJava 리액티브 프로그래밍(본문)최종.indd   39                                                      2019-03-26   오전 11:26:31
   26   27   28   29   30   31   32   33   34   35