Reactive Programing

리액티브 프로그래밍 (Reactive Programming) RxJava

태인킴 2020. 11. 1. 22:34
반응형


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콜백을 사용하지 않는 방향으로 설계 되어, 콜백 지옥을 피할수 있습니다.

반응형