본문 바로가기
Concepts/SW Architecture

프로그래밍 패러다임 - 개요

by ocwokocw 2021. 2. 10.

- 이 글은 로버트 C.마틴의 Clean Architecture를 기반으로 작성되었습니다. (가능하면 책을 읽어보는것을 추천한다.)

https://ko.wikipedia.org/wiki/%EA%B5%AC%EC%A1%B0%EC%A0%81_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

- 패러다임의 개요

프로그래밍의 대표적인 패러다임에는 구조적 프로그래밍, 객체지향 프로그래밍, 함수형 프로그래밍이 있다. 이번 절에서는 3가지 패러다임에 대한 간략한 개요를 알아보도록 한다.


- 구조적 프로그래밍

최초로 적용된 패러다임이다.(최초로 만들어진 패러다임은 아니다.) 데이크스트라는 무분별한 goto 문이 프로그램 구조에 해롭다는 사실을 제시하였다.(https://ko.wikipedia.org/wiki/Goto_%EB%AC%B8) 이러한 goto 문들은 분기에 관한 if/then/else와 반복에 대한 do/while/until 구조로 대체하였다.

 

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


- 객체 지향 프로그래밍

구조적 프로그래밍보다 2년 앞서 등장하였다. 요한 달과 크리스텐 니가드는 알골(ALGOL) 언어의 함수 호출 스택 프레임을 힙으로 옮기면, 함수 호출이 반환된 이후에도 함수에서 선언된 지역변수가 오랫동안 유지됨을 발견했다. 바로 이것이 클래스의 생성자가 되었다.

 

지역변수는 인스턴스 변수로 중첩 함수는 메서드가 되었다. 함수 포인터를 특정 규칙에 따라 사용하는 과정을 통해 필연적으로 다형성이 등장하게 되었다.

 

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


- 함수형 프로그래밍

함수형 프로그래밍은 컴퓨터 프로그래밍보다 먼저 등장하였다. 알론조 처치는 수학적 문제를 해결하는 과정에서 람다 계산법을 발명했는데, 함수형 프로그래밍은 이 영향을 받아 만들어졌다.

 

람다 계산법의 근간은 불변성으로 심볼의 값이 변경되지 않는다는 개념이다. 이는 함수형 언어에 할당문이 없다는 뜻이기도 하다. 함수형 언어가 값을 변경할 수 있는 방법을 제공하긴 하지만 까다로운 조건하에서만 가능하다.

 

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


- 결론

3가지 패러다임에 대해 "이런 사상으로 프로그래밍을 하라"고 해석할수도 있다. 하지만 다르게 해석해보면 각 패러다임을 제시하기전 어떤 행동을 할 때 문제가 되는 점을 먼저 부각시켰고, 해당 문제를 해결하기 위해 각 패러다임들은 goto문, 함수포인터, 할당문의 사용을 제한하였다.

 

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

 

세 가지 패러다임은 함수, 컴포넌트 분리, 데이터 관리의 관심사와 연관된다.

댓글