Page 28 -
P. 28

또한, 이 함수형 인터페이스 처리에 대해 부가 작용이 발생하지 않으면 여러 스레드에서 공유하는
               객체가 없게 돼 스레드 안전을 보장할 수 있습니다. 이에 따라 RxJava로 싱글 스레드에서 처리하
               는 것을 성능 향상을 위해 비동기로 변경한다고 해도 이미 구현된 로직은 변경되지 않습니다. 개

               발자는 어느 부분을 비동기로 할지만 설정하면 됩니다.
               함수형 프로그래밍은 데이터 처리 시점에도 영향을 미칩니다.

               인자로 데이터를 직접 지정하면 지정한 시점에 평가된 값을 받습니다. 인자로 수식을 지정하더라
               도 메서드는 지정한 시점에 평가된 수식을 결과로 전달받습니다. 즉, 메서드가 실행되기 전에 이

               미 값이 결정됩니다. 예를 들어, 다음과 같이 값을 인자로 전달받는 just 메서드에서 Flowable을
               생성하면 이 Flowable은 생성된 시점의 시스템 시각을 통지합니다.


                예제 1-8 값을 전달받을 때 _ L08_L09_FunctionalTimingSample.java
                 Flowable<Long> flowable = Flowable.just(System.currentTimeMillis());


               반면, 함수형 인터페이스를 메서드의 인자로 지정하면 해당 메서드가 처리를 수행하는 시점에 정
               의된 처리를 실행해 값을 가져옵니다. 예를 들어, 다음과 같이 인자의 함수형 인터페이스가 반환

               한 값을 데이터로 통지하는 fromCallable 메서드에서 Flowable을 생성하면 이 Flowable은 구
               독한 시점에서 함수를 호출해 호출한 시점의 시스템 시각을 통지합니다.

                예제 1-9 함수형 인터페이스를 전달받을 때 _ L08_L09_FunctionalTimingSample.java

                 Flowable flowable = Flowable.fromCallable(() -> System.currentTimeMillis());


               그러므로 just 메서드에서 생성한 Flowable은 여러 번 구독해도 같은 값을 통지하지만,
               fromCallable 메서드에서 생성한 Flowable은 구독할 때마다 다른 값을 통지합니다.





               1.3.3 비동기 처리


               지금까지 살펴본 것처럼 RxJava는 데이터를 통지하는 측의 처리 범위와 데이터를 받는 측의 처리
               범위를 분리할 수 있게 설계돼서 각각의 처리를 서로 다른 스레드에서 실행할 수 있습니다. 즉, 데
               이터를 통지하는 측이 무엇을 하더라도 데이터를 받는 측의 처리가 받은 데이터에 의해서만 바뀌
               게 된다면 비동기로 쉽게 전환할 수 있습니다.





         036





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