3장 패러다임 개요
구조적 프로그래밍
다익스트라가 발견한 패러다임으로, 최초로 적용된 패러다임이다. 다익스트라는 무분별한 goto문은 해롭다는 사실을 제시하고 if/then/else와 do/while/until과 같이 익숙한 구조로 대체했다.
구조적 프로그래밍은 제어흐름의 직접적인 전환에 대해 규칙을 부과한다.
객체 지향 프로그래밍
객체 지향 프로그래밍은 구조적 프로그래밍보다 2년 앞서서 등장했다. 알골(ALGOL) 언어의 함수 호출 스택 프레임(stack frame)을 힙(heap)으로 옮기면 함수 호출이 반환된 이후에도 함수에서 선언된 지역 변수가 오래 유지되는 것을 발견했다. 이러한 함수가 클래스의 생성자가 되었고 지역 변수는 인스턴스 변수, 중첩 함수는 메서드가 되었다. 또한 함수 포인터를 특정 규칙에 따라 사용하는 과정을 통해 다형성이 등장했다.
객체 지향 프로그래밍은 제어흐름의 간접적인 전환에 대해 규칙을 부과한다.
함수형 프로그래밍
최근에 들어서야 도입되기 시작했지만 가장 먼저 만들어진 패러다임이다. 수학적인 문제를 해결하는 과정에서 람다 계산법이 발명됐는데, 함수형 프로그래밍은 이것에 영향을 받아 만들어졌다. LISP 언어도 람다 계산법을 근간으로 만들어졌다. 람다 계산법의 기초가 되는 개념은 불변성(immutablity)으로 심볼(symbol)의 값이 변경되지 않는다는 개념이다. 즉, 함수형 언어에 할당문이 없다는 뜻이다.
함수형 프로그래밍은 할당문에 대해 규칙을 부과한다.
생각할 거리
각 패러다임은 프로그래머에게 추가적인 규칙을 부과한다. 즉 패러다임은 무엇을 해야 한다는 것 보다는 무엇을 해서는 안되는지 말해준다. 각각의 패러다임은 goto문, 함수 포인터, 할당문을 빼앗아갔다. 더이상 빼앗아 갈 것이 없기 때문에 프로그래밍 패러다임은 앞으로도 3가지 밖에 없을 것이다.
결론
패러다임과 아키텍처는 다음과 같은 관계가 있다.
아키텍처 경계를 넘나들기 위한 메커니즘으로 다형성(객체 지향)을 이용한다.
데이터의 위치와 접근 방법에 규칙을 부과하기 위해 함수형 프로그래밍을 이용한다.
모듈의 기반 알고리즘으로 구조적 프로그래밍을 사용한다.
Last updated