[clean Architecture책] 6장
함수형 프로그래밍
</br>
불변성과 아키텍처
아키텍처를 고려할 때 불변성은 매우 중요하다. 왜냐하면, 경합(race) 조건, 교착상태(deadlock)조건, 동시 업데이트(concurrent update)문제가 모두 가변 변수로 인해 발생하기 때문이다. 어떤 변수도 갱신되지 않는다면 이러한 문제는 발생하지 않는다.
</br>
가변성의 분리
상태 변경은 갖가지 동시성 문제에 노출하는 꼴이므로, 흔히 트랜잭션 메모리와 같은 실천법을 사용하여 동시 업데이트와 경합 조건 문제로부터 가변 변수를 보호한다(compare and swap, atomic변수들). 가능한 많은 컴포넌트를 불변 컴포넌트로 만들어야 함.
</br>
이벤트 소싱
이벤트 소싱은 상태가 아닌 트랜잭션을 저장하자는 전략. 요약하자면, 저장 공간과 처리 능력이 충분하면 애플리케이션의 완전한 불변성을 갖도록 만들 수 있고, 따라서 완전한 함수형을 만들 수 있다.
</br>
결론
- 구조적 프로그래밍은 제어흐름의 직접적인 전환에 부과되는 규율
- 객체 지향 프로그래밍은 제어흐름의 간접적인 전환에 부과되는 규율
- 함수형 프로그래밍은 변수 할당에 부과되는 규율