리엑티브 프로그래밍(Reactive programming)

리엑티브 프로그래밍(Reactive programming)

728x90

RxJava는 Reactive programming 패러다임을 Java에서 구현한 라이브러리 입니다.

Reactive Java 에서 이름을 따와 지었습니다.

리엑티브 프로그래밍(Reactive programming)이란?

위키피디아 reactive programming 정의

1)a declarative programming paradigm concerned with 2)data streams and the propagation of change.

1변화의 전파와 데이터 흐름 과 관련된 2 선언적 프로그래밍 패러다임

변화의 전파와 데이터 흐름 관점 : 리엑티브 프로그래밍은 데이터가 변경 될 때 마다 이벤트를 발생시켜서 데이터를 계속적으로 전달하는 Push 방식을 따릅니다.

Push 방식

데이터의 변화가 발생했을 때 변경이 발생한 곳에서 데이터를 보내주는 방식

리엑티브 프로그래밍

RTC(Real Time Communication)

DB Trigger

Spring의 ApplicationEvent

Angular의 데이터 바인딩

스마트폰의 Push 메시지

Pull 방식

변경된 데이터가 있는지 요청을 보내 질의하고 변경된 데이터를 가져오는 방식

c lient 요청 & server 응답 방식의 애플리케이션

절차형 프로그래밍 언어

선언적 프로그래밍 관점: 리엑티브 프로그래밍은 실행할 동작을 구체적으로 명시하는 명령형 프로그래밍과 달리 선언형 프로그래밍으로 단순히 목표를 선언한다.

선언적 프로그래밍(declarative programming)

= 함수형 프로그래밍(funtifunctional programming)

컴퓨터가 무엇(what) 을 해야하는지 프로그래밍

함수형 프로그래밍 언어는 1930년대에 알론조 처치가 개발한 람다 대수 에 이론적 기반을 둠

함수들로 프로그램이 구성됨

각 함수의 실행은 외부에 영향을 주지 않음(pure function인 경우).

병렬처리에 매우 유리

각 함수의 출력값은 다음 함수의 입력값으로 사용되는 형태로 연결됨

각 함수의 작동은 자신의 입력값에 의해 결정됨

재귀호출이 매우 자연스럽게 자주 이용되며, 동일한 입력값인 경우 동일한 출력값을 보장하기 때문에 병행 처리나 캐싱등으로 고속화에 유리한 장점이 있음.

프로그램이 실제로 어떻게 흘러가는지에 대한 묘사 없이 오직 프로그램의 논리에 초점을 맞춤

ex) xml, sql, 엑셀, css, Rxjava

명령형 프로그래밍 (imperative programming)

= 절차형 프로그래밍 ( procedural programming )

컴퓨터가 어떻게(how) 행동해야 하는지 프로그래밍

튜링머신을 반영한 프로그래밍 언어

오늘날의 99%가 명령형 프로그래밍

명령의 순차적 실행

때문에 프로그램의 시작부터 종료까지 수행할 내용(명령)들을 순서대로 나열하거나 특정한 기능을 수행하는 함수에 제어권을 넘겨 수행한 후 해당 결과를 반환받는 형태를 취함.

기억 장소 위치를 표현하는 변수의 사용

변수의 값을 변경하기 위한 배정문의 사용

명령어 언어의 순차적 명령에 의한 실행은 폰 노이만 병목 현상 을 불러 일으키게 됨.

때문에 많은 자료에 동시 적용될 수 있는 계산, 비결정적인 계산, 혹은 순서에 의존하지 않는 계산을 기술하는데 매우 비효율적.

ex) c, c++, java, python(혼합), 등..

리액티브 프로그래밍을 위해 알아야 될 것들

Observable : 데이터 소스

: 데이터 소스 리액티브 연산자(Operators) : 데이터 소스를 처리하는 함수

: 데이터 소스를 처리하는 함수 스케쥴러(Scheduler) : 스레드 관리자

: 스레드 관리자 Subscriber : Observable이 발행하는 데이터를 구독하는 구독자

: Observable이 발행하는 데이터를 구독하는 구독자 함수형 프로그래밍 : RxJava에서 제공하는 연산자(Operator) 함수를 사용

마블 다이어그램이란?

리액티브 프로그래밍을 통해 발생하는 비동기적인 데이터의 흐름을 시간의 흐름에 따라 시각적으로 표시한 다이어그램

마블 다이어그램을 알아야하는 이유

문장으로 적혀 있는 리액티브 연산자(Operators)의 기능을 이해하기 어려움

리액티브 연산자의 기능이 시각화 되어 있어서 이해하기 쉬움

리액티브 프로그래밍의 핵심인 연산자(Operators)를 사용하기 위한 핵심 도구

참고

youtu.be/VIoTmuwRsH0

www.slideshare.net/jongwookkim/ndc14-rx-functional-reactive-programming

youtu.be/2McwNWO8MIw

www.slideshare.net/deview/1b4-39616041

nittaku.tistory.com/179

from http://jade314.tistory.com/215 by ccl(A) rewrite - 2021-04-24 14:00:50