Page 29 -
P. 29

RxJava에서는 개발자가 직접 스레드를 관리하지 않게 각 처리 목적에 맞춰 스레드를 관리하는
                    스케줄러(scheduler)를 제공합니다. 이 스케줄러를 설정하면 어떤 스레드에서 무엇을 처리할지 제
                    어할 수 있습니다.                                                                        1

                    스케줄러는 데이터를 생성해 통지하는 부분과 데이터를 받아 처리하는 부분에 지정할 수 있습니
                    다. 전자는 데이터 생성의 기본이 되는 생산자(Flowable/Observable)를 말하는 것으로, 생성                       RxJava의 기본
                    메서드에서 생성한 Flowable/Observable이 데이터 통지를 어떤 스케줄러에서 처리할지를 제

                    어합니다. 후자는 데이터의 필터나 변환을 하는 메서드와 소비자(Subscriber/Observer) 등이 데
                    이터의 수신 처리를 어느 스케줄러에서 할지를 제어합니다. 이러한 구조로 RxJava는 쉽게 비동기
                    처리를 할 수 있습니다.

                    하지만 RxJava로 비동기 처리를 할 때도 문제가 발생하지 않게 개발자는 주의를 기울여야 합니
                    다. 앞서 설명한 바와 같이 데이터를 통지하는 측과 받는 측은 데이터 통지 시에만 데이터를 주고
                    받아야 하며 그 이외의 요인으로 서로의 행동에 영향을 주지 않아야 합니다.

                    예를 들어, 생산자와 소비자 사이에서 이루어지는 처리를 외부 변수를 참조해 바꾸면 비동기 처리

                    에 영향을 주게 됩니다. 다음 예제는 변수를 참조해 데이터를 받았을 때 처리를 변수에 따라 바꾸
                    고 있습니다.


                     예제 1-10 외부 영향을 받는 예제 _ L10_EffectedSample.java
                      // 계산 방법을 나타내는 enum 객체
                      private enum State {
                          ADD, MULTIPLY;
                      };


                      // 계산 방법
                      private static State calcMethod;


                      public static void main(String[] args) throws Exception {

                      // 계산 방법을 덧셈으로 설정한다
                          calcMethod = State.ADD;

                          Flowable<Long> flowable =
                              // 300밀리초마다 데이터를 통지하는 Flowable을 생성한다
                              Flowable.interval(300L, TimeUnit.MILLISECONDS) //  1
                                  // 7건까지 통지한다
                                  .take(7) //  2
                                  // 각 데이터를 계산한다


                                                                                                  037





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