소개
클린아키텍처: 소프트웨어 구조와 설계의 원칙 책을 읽고 정리하며 소감을 적는 포스트입니다.
패러다임 개요
구조적 프로그래밍(Structured Programming)
최초로 적용된 패러다임은 구조적 프로그래밍으로, 1968년 에츠허르 비버 데이크스트라(Edsger Wybe Dijkstra)가 발견했다.
데이크스트라는 무분별한 점프(goto)는 프로그래밍에 해롭다는 사실을 제시하고 if/then/else와 do/while/until 과 같은 더 익숙한 구조로 대체 했다.
구조적 프로그래밍은 제어흐름의 직접적인 전환에 대해 규칙을 부과 한다.
객체 지향 프로그래밍(Object-Oriented Programming)
1966년, 올레 요한 달(Ole Johan Dahi)과 크리스텐 니가드(Kristen Nygaard)에 의해 등장 했다.
알골(ALGOL)언어의 함수 호출 스택 프레임을 힙으로 옮기면, 함수 호출이 반환된 이후에도 함수에서 선언된 지역 변수가 오랫동안 유지될 수 있음을 발견했다.
바로 이러한 함수가 클래스의 생성자가 되었고, 지역 변수는 인스턴스 변수, 그리고 중첩 함수는 메서드가 되었다.
함수 포인터를 특정 규칙에 따라 사용하는 과정을 통해 필연적으로 다형성이 등장하게 되었다.
객체 지향 프로그래밍은 제어흐름의 간접적인 전환에 대해 규칙을 부과한다.
함수형 프로그래밍(Functional Programming)
최근에야 도입되기 시작했지만 세 패러다임 중 가장 먼저 만들어졌다.
알론조 처치(Alonzo Church)는 람다(lambda)계산법을 발명했는데, 함수형 프로그래밍은 이러한 영향을 받아 만들어졌다.
1958년 존 매카시(John McCarthy)가 만든 LISP 언어의 근간이 되는 개념이 바로 이 람다 계산법이다.
람다 계산법의 기초가 되는 개념은 불변성(immutability)으로 심볼(symbol)의 값이 변경되지 않는다는 개념이다.
함수형 프로그래밍은 할당문에 대해 규칙을 부과한다.
생각할 거리
각 패러다임은 프로그래머에게서 권한을 박탈한다. 어느 패러다임도 새로운 권한을 부여하지 않는다.
세 가지 패러다임은 각각 우리에게 goto문, 함수 포인터, 할당문을 앗아갔다.
아마 우리에게서 더 가져갈 것이 없기 때문에 이제 패러다임은 딱 이 세 가지 밖에 남지 않을 것이다.
결론
우리가 패러다임으로 얻을 수 있는 교훈은 관계이다.
우리는 아키텍처 경계를 넘나들기 위한 메커니즘으로 다형성을 이용한다.
우리는 함수형 프로그래밍을 이용하여 데이터의 위치와 접근 방법에 대해 규칙을 부과 한다.
우리는 모듈 기반 알고리즘으로 구조적 프로그래밍을 사용한다.
세가지 패러다임과 아키텍처의 세 가지 큰 관심사(함수, 컴포넌트 분리, 데이터 관리)가 어떻게 서로 연관되는지에 주족해야 한다.