구조적 프로그래밍
- 최초로 적용된 패러다임
- '데이크스트라'는 무분별한 점프(goto 문장)은 프로그램 구조에 해롭다는 사실을 제시
- 이러한 점프들을 if/then/else와 do/while/until과 같이 더 익숙한 구조로 대체
- 구조적 프로그래밍은 제어 흐름의 직접적인 전환에 대해 규칙을 부과
객체 지향 프로그래밍
- 구조적 프로그래밍보다 2년 앞선 '요한 달'과 '크리스텐 니가드'에 의해 등장
- 알골(ALGOL) 언어의 함수 호출 스택 프레임(stack frame)을 힙(heap)으로 옮기면, 함수 호출이 반환된 이후에도 함수에서 선언된 지역 변수가 오랫동안 유지될 수 있음을 발견
- 이러한 함수가 클래스의 생성자가 되었고, 지역 변수는 인스턴스 변수, 그리고 중첩 함수는 메소드가 되었다
- 함수 포인터를 특정 규칙에 따라 사용하는 과정을 통해 필연적으로 다형성이 등장
- 객체 지향 프로그래밍은 제어 흐름의 간접적인 전환에 대해 규칙을 부과
함수형 프로그래밍
- 컴퓨터 프로그래밍 자체보다 먼저 등장
- '알론조 처치'는 어떤 수학적 문제를 해결하는 과정에서 람다(lambda) 계산법을 발명
- '존 매카시'가 만든 LISP 언어의 근간이 되는 개념이 바로 이 람다 계산법
- 람다 계산법의 기초가 되는 개념은 불변성(immutability)으로, 심볼(symbol)의 값이 변경되지 않는다는 개념
- 함수형 언어에는 할당문이 전혀 없다는 뜻
- 함수형 프로그래밍은 할당문에 대해 규칙을 부과
생각할 거리
- 위의 각 패러다임은 프로그래머에게서 권한을 박탈