일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 백준
- 임베디드
- 데이터베이스
- 릿코드
- Embedded
- Network
- leetcode
- ps
- Application Layer
- BHS
- 네트워크
- STL
- 전송 계층
- DB
- swea
- 프로그래머스
- Djikstra
- 부트시퀀스
- 문제풀이
- C++
- boot sequence
- 응용 계층
- Transport layer
- dp
- 자료구조
- BST
- Database
- 관계형 모델
- 다익스트라
- baekjoon
- Today
- Total
BOBO's Note
Reactive Programming 본문
Reactive Programming
Reactive Programming이란, 실시간으로 반응하는 프로그래밍 또는 비동기적 데이터 스트림을 처리하는 프로그래밍이다. 반응형 프로그래밍에서는 기본적으로 모든 것을 비동기적인 데이터 스트림으로 간주하고, 이 스트림을 옵저버 패턴을 이용해서 처리한다.
옵저버 패턴이란, 옵저버블 객체의 상태가 변할 때 등록된 옵저버들에게 이를 알려주는 디자인 패턴이다.
다른 말로 하자면, 실시간으로 반응하기 위해 프로그램은 각 데이터 스트림을 observe하여 이벤트가 발생하는 것을 notice한다.
Functional Programming
Functional Programming이란, 프로그램을 수학적 함수의 조합으로 만드는 방식으로 람다 대수로부터 발전했다. 이때 함수는 프로그램의 상태, 즉 함수 외부의 값을 변경할 수 없다.
cf) 절차형 프로그래밍에서 함수를 특정 기능을 수행하는 역할로 생각한다. 프로그램의 상태를 바꿀 수 있는 side effect가 발생할 수 있다. 또한 프로그램의 상태에 따라 같은 코드라도 다른 결과값을 낼 수 있다.
함수형 프로그래밍은 다음과 같은 특징을 갖는다.
- Immutability(불변성): 데이터를 변경할 수 없다. 데이터 변경이 필요한 경우, 원본 데이터의 복사본을 만들어 일부를 변경하고, 변경한 복사본을 이용해 작업을 계속한다.
- Pure Function(순수함수): side effect가 없는 함수이다. 즉, 함수의 실행이 함수 외부에 영향을 끼치지 않는 함수이다.
- Anonymous Function(익명함수, 람다함수): 이름이 없는 함수이다. 간결한 코드 작성이 가능하다.
- 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 |