가변성 분리
•
함수형 언어에서는 변수의 값이 변경되지 않는다.⇒ 이러한 특성은 경합 조건, 교착상태 조건, 동시 업데이트 등의 동시성 문제를 해결해준다.
•
애플리케이션을 올바르게 구조화하려면 변수를 변경하는 컴포넌트와 변경하지 않는 컴포넌트를 분리해야 한다. 가변 컴포넌트는 트랜잭션 메모리를 통해 동시성 문제로부터 가변 변수를 보호할 수 있다.
이벤트 소싱
•
상태가 아닌 트랜잭션을 저장하는 전략이다.
•
생성과 읽기 연산만 발생하는 저장소를 구현하는 전략이다.
•
Github와 같은 시스템이 대표적인 예시이다.
결론
•
구조적 프로그래밍은 제어 흐름의 직접적인 전환에 대해 규칙을 부과한다.
•
객체 지향 프로그래밍은 제어 흐름의 간접적인 전환에 대해 규칙을 부과한다.
•
함수형 프로그래밍은 변수 할당문에 대해 규칙을 부과한다.
•
어떤 프로그래밍 패러다임도 우리의 권한이나 능력을 확장하지 않으며, 단지 코드를 작성하는 방식을 제한할 뿐이다.
•
도구와 하드웨어는 변화했지만, 소프트웨어의 핵심은 여전히 동일하다. 모든 프로그램은 순차, 분기, 반복, 참조로 구성되며, 그 이상도 이하도 아니다.