
람다 계산법
사례(p54)
클로저 vs 자바 프로그램
클로저 → x와 같은 변수가 한 번 초기화되면 절대로 변하지 않는다.
자바 프로그램 → 가변 변수 사용하여 프로그램 실행 중에 상태가 변할 수 있다.
⇒ 함수형 언어에서 변수는 변경되지 않는다.
경합(race) 조건, 교착 상태(deadlock) 조건, 동시 조건 업데이트 문제는 가변 변수로부터 발생.
아키텍트는 동시성 문제에 관심을 가져야하고 불변성은 실현될 수 있지만 타협이 필요.
불변 컴포넌트
- 순수하게 함수형 방식으로 처리. 가변 변수 사용 X. 순수형 컴포넌트가 아닌 하나 이상의 다른 컴포넌트와 서로 통신. (p57 그림 6.1)
- 트렌젝션 메모리 등을 사용하여 가변 변수 보호
ex) 클로저의 atom 기법 - swap!를 사용하여야만 값 변경
⇒ 애플리케이션을 제대로 구조화하려면 가변 컴포넌트와 불변 컴포넌트로 분리해야하고 많은 것을 불변 컴포넌트로 옮겨야함.
: 상태가 이닌 트랜젝션을 저장하자는 전략. 상태가 필요해지면 단순히 상태의 시작점부터 모든 트렌젝션 저장.
→ 테이터 저장소 예시
⇒ 소프트웨어는 순차, 분기, 반복, 참조로 구성된다.