4장 구조적 프로그래밍
- 현재의 우리 모두는 구조적 프로그래머이며, 여기에는 선택의 여지가 없다. 제어흐름을 제약 없이 직접 전환할 수 있는 선택권 자체를 언어에서 제공하지 않기 때문이다.
- 예시로 goto 같은 것이 있는데 거의 사라짐. 아직 존재하는 프로그래밍 언어에서도 그 범위를 함수 안에서만으로 한정시킴
5장 객체지향 프로그래밍
- OO 언어로 개발된 시스템을 다루는 소프트웨어 아키텍트는 시스템의 소스 코드 의존성 전부에 대해 방향을 결정할 수 있는 절대적인 권한을 갖는다(다형성을 이용하여). 즉, 소스 코드 의존성이 제어흐름의 방향과 일치되도록 제한되지 않는다. 이것이 바로 OO 가 제공하는 힘 ⇒
배포 독립성
이 가능함 &개발 독립성
도 가능함
6장 함수형 프로그래밍
- 가변 변수가 전혀 없다. 즉, 변수는 한 번 초기화되면 절대로 변하지 않는다. ⇒ 동시성 애플리케이션에서 마주치는 모든 문제가 생기지 않는다.
- 불변성과 관련하여 가장 주요한 타협 중 하나는 애플리케이션, 또는 애플리케이션 내부의 서비스를 가변 컴포넌트와 불변 컴포넌트로 분리하는 일이다.
- 이벤트 소싱
- 이벤트 소싱에 깔려 있는 기본 발상이 상태를 저장하는 것이 아니라(변경되는) 트랜잭션을 저장하자(변경 사항들을)는 전략임. 상태가 필요해지면 상태의 시작점으로부터 모든 트랜잭션을 처리함
- 지름길을 택할 수도 있음. 매일 자정에 상태를 계산한 후 저장, 그 후 상태 정보가 필요해지면 자정 이후의 트랜잭션만을 처리
- 저장 공간과 처리 능력이 충분하면 애플리케이션이 완전한 불변성을 갖도록 만들 수 있고, 따라서 완전한 함수형으로 만들 수 있다
- 가변 변수를 변경할 때는 트랜잭션 메모리 기법을 이용해 변경함
- 트랜잭션 메모리 : Transaction memory is a technique that provides a higher-level abstraction for controlling access to shared data (eg. CAS(Compare And Set) 알고리즘)
4,5,6장 요약
- 구조적 프로그래밍은 제어흐름의 직접적인 전환(eg.
goto
)에 부과되는 규율
- 객체 지향 프로그래밍은 제어흐름의 간접적인 전환(인터페이스를 통한 의존성 역전. 소스 코드 의존성이 제어흐름의 방향과 일치되도록 제한 x)에 부과되는 규율
- 함수평 프로그래밍은 변수 할당에 부과되는 규율