Summary

이 장에서는 세 가지 패러다임인 구조적 프로그래밍(structured programming), 객체 지향 프로그래밍(object-oriented programming), 함수형 프로그래밍(functional programming)에 대해 설명한다.

구조적 프로그래밍

구조적 프로그래밍은 제어흐름의 직접적인 전환에 대해 규칙을 부과한다.

1968년 Edsger Wybe Dijkstra가 발견한 최초로 만들어진 패러다임은 아니지만 최초로 적용된 패러다임이다.

다익스트라는 무분별한 점프(goto 문)는 프로그램 구조에 해롭다는 사실을 제시하고, if/then/else와 do/while/until과 같은 구조로 대체했다.

객체 지향 프로그래밍

객체 지향 프로그래밍은 제어흐름의 간접적인 전환에 대해 규칙을 부과한다.

1966년 Ole Johan Dahl과 Kristen Nygaard에 의해 등장했다.

객체지향 — 함수 호출 stack 프레임을 heap으로 옮기면, 함수 호출이 반환된 이후에도 함수에서 선언된 지역변수가 오랫동안 유지될 수 있음을 발견하고, 바로 이러한 함수가 클래스의 생성자가 되었고, 지역 변수는 인스턴스 변수, 그리고 중첩 함수는 메서드가 되었다.

다형성 — 함수 포인터를 특정 규칙에 따라 사용하는 과정을 통해 필연적으로 다형성이 등장하게 되었다.

함수형 프로그래밍

함수형 프로그래밍은 할당문에 대해 규칙을 부과한다.

세 패러다임 중 가장 먼저 만들어졌지만 최근에 도입되기 시작했다.

Alonzo Church는 어떤 수학적 문제를 해결하는 과정에서 람다(lambda) 계산법을 발명했는데, 함수형 프로그래밍은 이 연구 결과에 직접적인 영향을 받았다.

1958년 John McCarthy가 만든 LISP 언어의 근간이 이 람다 계산법이다.

람다 계산법의 기초가 되는 개념은 불변성(immutability)으로, 심볼의 값이 변경되지 않는다는 개념이다.