함수형 프로그래밍(Functional Programming)
함수형 프로그래밍(FP, Functional Programming)
- 람다 계산법이 패러다임의 기반
- 함수형 프로그래밍에서 변수는 변하지 않는다(불변성)
불변성과 아키텍처
- 멀티 스레드 또는 프로세스에서 발생하는 경합 조건(race condition), 교착 상태(deadlock), 동시 업데이트(concurrent update) 등의 문제들은 변수의 가변성으로 인해 발생
- 불변성이 실현 가능한지는 저장 공간과 프로세서의 속도가 무한하다는 가정 하에 긍정적일 수 있다
- 따라서, 불변성은 저장 공간과 프로세서 속도와의 타협이 필요하다
가변성의 분리
- 불변성의 타협 포인트 중 중요한 하나는 서비스 내 컴포넌트 중 '가변 컴포넌트'와 '불변 컴포넌트'로 분리하는 것
- 불변 컴포넌트는 가변 변수를 사용하지 않으며, 순수하게 함수형 방식으로만 작업 처리
- 불변 컴포넌트는 순수 함수형 컴포넌트가 아닌 다른 컴포넌트와 서로 통신
- 상태 변경은 트랜잭션 메모리(transactional memory)와 같은 기법을 사용해 concurrent update, race condition으로 부터 가변 변수를 보호
- 애플리케이션을 제대로 구조화하기 위해서는 가변 컴포넌트와 불변 컴포넌트를 분리하고 가변 변수들을 보호할 적절한 수단을 동원해야 한다
이벤트 소싱(Event sourcing)
- 어떤 서비스를 불변 컴포넌트로만 동작하기 위해서 무한한 저장 공간과 처리 능력이 필요할 때, 영원히 동작하기 보다는 애플리케이션의 수명주기 동안만 문제없이 돌아가도록 한다면 훨씬 적은 저장 공간과 처리 능력이 요구될 수 있다.
- 이러한 발상이 기본이 되는 전략이 이벤트 소싱
- 상태가 아닌 트랜잭션을 저장하는 전략
- 상태가 필요해지면 단순히 상태의 시작점부터 모든 트랜잭션을 처리한다.
패러다임
- 구조적 프로그래밍은 "제어흐름의 직접적인 전환에 부과되는 규율"
- 객체 지향 프로그래밍은 "제어흐름의 간접적인 전환에 부과되는 규율"
- 함수형 프로그래밍은 "변수 할당에 부과되는 규율"
- 각 패러다임은 코드를 작성하는 방식의 형태를 한정시킨다
서적 : http://www.yes24.com/Product/Goods/77283734
'Architecture' 카테고리의 다른 글
[Clean Architecture 정리] 8장. OCP (0) | 2022.07.19 |
---|---|
[Clean Architecture 정리] 7장. SRP (0) | 2022.07.17 |
[Clean Architecture 정리] 5장. 객체 지향 프로그래밍 (0) | 2022.07.17 |
[Clean Architecture 정리] 4장. 구조적 프로그래밍 (0) | 2022.07.16 |
[Clean Architecture 정리] 3장. 패러다임 개요 (0) | 2022.07.10 |
댓글