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