hexdrinker

패러다임 개요

-2 min read

3.1 구조적 프로그래밍

최초로 적용된 패러다임(최초로 만들어진 것은 아님)은 구조적 프로그래밍으로 1968년 다익스트라 알고리즘으로도 유명한 에츠허르 비버 다익스트라(Edsger Wybe Dijkstra)에 의해 발견되었다.

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

구조적 프로그래밍은 한 마디로 아래와 같이 요약할 수 있다.

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

3.2 객체 지향 프로그래밍

두 번째로 도입된 패러다임은 구조적 프로그래밍보다 2년 앞선 1966년 올레 요한 달(Ole Johan Dahl)과 크리스텐 니가드(Kristen Nygaard)에 의해 등장했다. 이들은 알골(Algol) 언어의 함수 호출 스택 프레임을 힙으로 옮기면 함수 호출이 반환된 이후에도 함수에서 선언된 지역 변수가 오랫동안 유지될 수 있음을 발견했다.

이 함수가 클래스의 생성자가 되었고 지역 변수와 중첩 함수는 인스턴스 변수, 메서드가 되었다.

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

객체 지향 프로그래밍은 한 마디로 아래와 같이 요약할 수 있다.

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

📝

알골(Algol)은 알고리즘 랭귀지(Algorithmic Language)의 준말이다. 1950년대 미국에서 만들어진 포트란에 대항하여 유럽의 학자들을 중심으로 개발된 언어이다.

3.3 함수형 프로그래밍

세 번째 패러다임은 최근에서야 도입되기 시작했으나 세 패러다임 중 가장 먼저 만들어졌다.

사실 함수형 프로그래밍은 컴퓨터 프로그래밍 자체보다 먼저 등장했다.

알론조 처치(Alonzo Church)는 엘런 튜링도 똑같이 흥미를 느꼈던 수학적 문제를 해결하는 과정에서 람다 계산법을 발명했는데 함수형 프로그래밍은 이러한 연구 결과에 직접적인 영향을 받아 만들어졌다.

1958년 존 매카시(John McCarthy)가 만든 LISP 언어의 근간이 되는 개념이 바로 이 람다 계산법이다.

람다 계산법은 불변성을 기초로 하며 이는 심볼의 값이 변경되지 않는다는 개념으로, 함수형 언어에는 할당문이 전혀 없다는 뜻이기도 하다.

함수형 프로그래밍은 한 마디로 아래와 같이 요약할 수 있다.

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

3.4 생각할 거리 및 결론

각 패러다임은 부정적인 의도를 가지는 일종의 추가적인 규칙을 부과하여 무엇을 해야할지를 말하기보다는 무엇을 해서는 안되는지를 말해준다

세 가지 패러다임은 각각 우리에게서 goto문, 함수 포인터, 할당문을 앗아간다.

패러다임의 역사로부터 우리는 무엇을 얻을 수 있는가?
그리고 그것은 아키텍처와 어떤 관계가 있는가?

우리는 아키텍처 경계를 넘나들기 위한 메커니즘으로 다형성을 이용하며 함수형 프로그래밍을 이용하여 데이터의 위치와 접근 방법에 대해 규칙을 부과한다. 그리고 모듈 기반의 알고리즘으로 구조적 프로그래밍을 사용한다.

이러한 세 가지 패러다임과 아키텍처의 세 가지 큰 관심사(함수, 컴포넌트 분리, 데이터 관리)가 어떻게 서로 연관되는지 고민해보자.