1. 리액티브 프로그래밍
리액티브 프로그래밍은 데이터 흐름을 먼저 정의하고 데이터가 변경되었을 때 연관되는 함수나 수식에 의해서 업데이트되는 방식 입니다. 리액티브 연산자를 활용하여 함수형 프로그래밍 방식으로 스레드에 안전한 비동기 프로그래밍 방식 입니다.
2. 명령형 프로그래밍 vs 리액티브 프로그래밍
명령형 프로그래밍 : 어떤 기능을 직접 실행 하여, 데이터를 새로 계산하는 당겨오는 방식 입니다. (pull 방식)
리액티브 프로그래밍 : 어떤 기능을 직접 실행 하는 것이 아니라, 시스템에 어떤 이벤트가 발생했을 때 처리하는 방식 입니다. (push 방식)
3. 엑셀 프로그램
리액티브 프로그래밍의 예시로 엑셀(Excel)이 있습니다. 각 셀에 매출을 입력하여, 1월 ~ 5월 까지의 합계를 계산 합니다. 이때, 매월 매출액은 리액티브 프로그래밍의 데이터 소스에 해당 합니다.
만약, 2월 매출이 10 -> 20으로 변경 되었습니다.
명령형 프로그래밍 : '합계'의 계산 시점은 (웹사이트 라면) 사용자가 새로 고침 버튼을 눌렀을 때, 데이터 베이스에서 읽어와 갱신 합니다.(pull 방식)
리액티브 프로그래밍 : 데이터 소스(B2 셀)로 부터 변경된 데이터를 이벤트로 통지 받아, 미리 정해 놓은 수식(=SUM(A2:E2))을 통해 합계가 갱신 됩니다.(push 방식)
4. Java와 RxJava
- 기존 pull 방식의 프로그래밍 개념을 push 방식의 프로그래밍 개념으로 바꾼다. (Observer 패턴)
- 함수형 프로그래밍의 지원을 받는다.
5. 함수형 프로그래밍이 필요
콜백(Observer 패턴)은 멀티 스레드 환경에서는 사용할 때 많은 주의가 필요 합니다. 대표적인 예가 데드락과 동기화 문제입니다. 함수형 프로그래밍은 부수효과(Side Effect)가 없는 순수 함수를 지향 합니다. 따라서 멀티 스레드 환경에서도 안전 합니다.
- 순수 함수 : 어떤 함수에 동일한 인자를 주었을때 항상 같은 값을 리턴함, 모듈화 수준이 높고, 재사용성이 높음
- 부수효과 : 같은 자원에 여러 스레드가 경쟁 조건(race condition)에 빠지게 되었을 때 예측할 수 없는 잘못된 결과가 발생.
6. 리액티브 연산자
자바는 함수형 언어가 아니므로, RxJava 라이브리리는 순수함수로 작성된 리액티브 연산자를 제공 합니다. 리액티브 연산자를 활용하여 함수형 프로그래밍 방식으로 스레드에 안전한 비동기 프로그램을 작성 할수 있습니다. 리액티브 프로그래밍은 비동기 연산을 필터링, 변환, 조합해 결과를 취합하여 최종 리턴하는 방식 입니다. 따라서 RxJava는 Observable과 같은 데이터 소스와 map(), filter(), reduce() 등 과 같은 리액티브 연산자를 제공 합니다.
7. 콜백 지옥 탈출
콜백이 콜백을 부르는 콜백 지옥 상황이 코드의 가독성을 떨어 뜨리고, 문제 발생 시 디버깅을 어렵게 만듭니다. RxJava는 콜백을 사용하지 않는 방향으로 설계 되어, 콜백 지옥을 피할수 있습니다.
'Reactive Programing' 카테고리의 다른 글
FlatMap 파헤치기 (0) | 2021.02.02 |
---|---|
Cold Observable vs Hot Observable (PublishSubject 클래스) (0) | 2020.11.22 |
Java API를 RxJava와 통합 하는 방법 (0) | 2020.10.31 |
Flowable 배압(BackPressure) 대응 (0) | 2020.10.30 |
RxJava의 Single, Maybe 클래스 (0) | 2020.10.15 |