027. (Clean Architecture) 3. 패러다임 개요

3. 패러다임 개요

프로그래밍 언어에는 크게 3가지 패러다임이 존재한다.

각각 아래와 같다.

  • 구조적 프로그래밍(structured programming)
  • 객제 지향 프로그래밍(object-oriented programming)
  • 함수형 프로그래밍(functional programming)

하나씩 간단하게 개념을 살펴보고, 포스팅을 하나씩 할당해서 좀 더 깊게 살펴보도록 하자.

3.1. 구조적 프로그래밍

최초로 적용된 패러다임이다.

에츠허르 다익스트라(Edsger Wybe Dijkstra) 가 프로그램을 프로시저 단위로 분류하고, 프로시저끼리 호출하는 구조적 프로그래밍 방식을 제안하면서 발전이 시작되었다.

구조적 프로그래밍 도입 후, 커다란 문제를 작은 문제로 나누어 해결하는 탑다운 방식이 정착되었다.

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

참고 최초로 적용된 패러다임은 아니다.

3.2. 객체 지향 프로그래밍

두 번째로 적용된 패러다임은 객체 지향 프로그래밍이다.

사실 구조적 프로그래밍보다 2년 앞서 제안되었으며, 아래와 같은 과정을 통해 탄생하였다.

1966년, 올레 요한 달(Ole Johan Dahl)과 크리스텐 니가드(Kristen Nygaard)가 알골 언어의 함수 호출 스택 프레임을 힙으로 옮기면

함수 호출이 반환된 이후에도 함수에서 선언된 지역 변수가 오랫동안 유지될 수 있음을 발견하였다.

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

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

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

3.3. 함수형 프로그래밍

세 번째 패러다임은 최근에 도입되기 시작했으나 가장 먼저 만들어진 함수형 프로그래밍이다.

알론조 처치(Alonzo Church)가 어떤 수학적 문제를 해결하는 과정에서 람다(lambda) 계산법을 발명하였고, 이에 영향을 받아 만들어진 패러다임이다.

이후 람다 계산법은 1958년 존 매카시(John McCarthy)가 만든 LISP 언어의 근간이 되었다.

람다 계산법은 불변성을 기초로하여 심볼의 값이 변경되지않는 개념으로 할당문이 전혀 없는 구조가 만들어진다.

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

3.4. 결론

프로그래밍 패러다임은 무엇을 해야할지보다는 무엇을 해선 안되는지를 명세해준다.

패러다임의 역사로부터는 무엇을 얻을 수 있을까?

그리고 아키텍처와는 어떤 관계가 있을까?

우리는 아키텍처 경계를 넘나들기 위해 다형성을 이용하며, 함수형 프로그래밍을 이용해 데이터의 위치와 접근 방법에 대한 규칙을 부여한다.

또한 모듈들을 기반으로 구조적 프로그래밍을 사용하기도 할 것이다.

위 세 가지 패러다임과 아키텍처의 큰 관심사인 함수, 컴포넌트 분리, 데이터 관리가 어떻게 연관되는지에 대해서도 생각해보자.

References