BOBO's Note

Reactive Programming 본문

C, C++

Reactive Programming

bobo_hee 2020. 6. 13. 00:02

Reactive Programming

Reactive Programming이란, 실시간으로 반응하는 프로그래밍 또는 비동기적 데이터 스트림을 처리하는 프로그래밍이다. 반응형 프로그래밍에서는 기본적으로 모든 것을 비동기적인 데이터 스트림으로 간주하고, 이 스트림을 옵저버 패턴을 이용해서 처리한다.

옵저버 패턴이란, 옵저버블 객체의 상태가 변할 때 등록된 옵저버들에게 이를 알려주는 디자인 패턴이다.

다른 말로 하자면, 실시간으로 반응하기 위해 프로그램은 각 데이터 스트림을 observe하여 이벤트가 발생하는 것을 notice한다.

 

Functional Programming

Functional Programming이란, 프로그램을 수학적 함수의 조합으로 만드는 방식으로 람다 대수로부터 발전했다. 이때 함수는 프로그램의 상태, 즉 함수 외부의 값을 변경할 수 없다.

cf) 절차형 프로그래밍에서 함수를 특정 기능을 수행하는 역할로 생각한다. 프로그램의 상태를 바꿀 수 있는 side effect가 발생할 수 있다. 또한 프로그램의 상태에 따라 같은 코드라도 다른 결과값을 낼 수 있다.

 

함수형 프로그래밍은 다음과 같은 특징을 갖는다.

  1. Immutability(불변성): 데이터를 변경할 수 없다. 데이터 변경이 필요한 경우, 원본 데이터의 복사본을 만들어 일부를 변경하고, 변경한 복사본을 이용해 작업을 계속한다.
  2. Pure Function(순수함수): side effect가 없는 함수이다. 즉, 함수의 실행이 함수 외부에 영향을 끼치지 않는 함수이다. 
  3. Anonymous Function(익명함수, 람다함수): 이름이 없는 함수이다. 간결한 코드 작성이 가능하다.
  4. High-Order Function(고계함수): 함수를 다루는 함수이다. 함수도 '값'으로 취급하여 함수를 인자로 전달할 수도 있고 리턴값으로 반환할 수도 있다.
    • map, filter, reduce

 

(+): 오직 입력값에만 영향을 받기 때문에 프로그램 검증이 쉽다.

(+): 최적화가 가능하다. 이전에 계산해둔 함수의 결과값을 memoization할 수 있고, JVM 같은 런타임 환경이 코드 순서를 임의로 배치할 수 있게 한다.

(+): concurrent 프로그래밍이 쉽다. 여러 스레드가 프로그램 상태를 공유하기 때문에 동기화 기법이 필요했는데, 함수형 프로그래밍에서는 상태를 갖지 않기 때문에 필요없다.

 

예) LISP, Scala 등

 

ReactiveX (Reactive eXtension)

Rx는 Functional Reactive Programming의 원리를 이용해 비동기적 이벤트를 손쉽게 처리하기 위해 만들어진 API이다. 즉, 옵저버 패턴과 함수형 프로그래밍의 조합이다. 

 

예) RxJava, RxJs 등

'C, C++' 카테고리의 다른 글

연산자 오버로딩  (0) 2020.06.29
static 키워드  (0) 2020.06.04
Design Pattern  (0) 2020.06.04
Comments