패러다임 개요

Gooreum·2021년 10월 28일
0

클린아키텍처

목록 보기
3/33

패러다임이란

  • 프로그래밍을 하는 방법으로, 대체로 언어에는 독립적이다.
  • 패러다임은 어떤 프로그래밍 구조를 사용할지, 그리고 언제 이 구조를 사용해야 하는지를 결정한다.
  • 현재까지 이러한 패러다임에는 세 가지 종류가 있다.

구조적 프로그래밍(structured programming)

  • 최초로 적용된 패러다임(최초로 만들어진 패러다임은 아님).
  • 구조적 프로그래밍은 제어흐름의 직접적인 전환에 대해 규칙을 부과한다.
    • 데이크스트라가 무분별한 점프(goto 문장)는 프로그램 구조에 해롭다는 사실을 제시.
    • 그는 이러한 점프들을 if/then/else 와 do/while/until과 같이 더 익숙한 구조로 대체하였음.

객체 지향 프로그래밍(object oriented programming)

  • 두 번째로 도입된 패러다임.
  • 객체 지향 프로그래밍은 제어흐름의 간접적인 전환에 대해 규칙을 부과한다. → 다형성을 얘기하는 것인가?(다형성을 통해 의존성 역전을 만들 수 있고, 제어흐름과 의존성의 방향이 일치하지 않도록 해주는 것)
    • 알골(ALGOL) 언어의 함수 호출 스택 프레임을 힙(heap)으로 옮기면, 함수 호출이 반환된 이후에도 함수에서 선언된 지역 변수가 오랫동안 유지될 수 있음을 발견.
      • (스택 프레임에 있다면, 함수 호출 종료 후에 해당 함수의 지역변수, 매개변수, 리턴 레지스터는 스택 프레임에서 제거됨.)
      • 힙 영역에 있다면 사용자가 지속해서 해당 내용(매개변수, 지역변수등)을 요구할 수 있게 되어서 그런가? 힙 영역은 런 타임시에 할당되는 동적 할당영역이기 때문에?
    • 바로 이러한 함수가 클래스의 생성자가 되었고, 지역 변수는 인스턴스 변수, 그리고 중첩 함수는 메서드가 되었음.
    • 함수 포인터를 특정 규칙에 따라 사용하는 과정을 통해 필연적으로 다형성이 등장하게 됨.

함수형 프로그래밍

  • 최근에 많이 도입되기 시작했으나, 세 패러다임 중 가장 먼저 만들어졌다.
    • 컴퓨터 프로그래밍 자체보다 먼저 등장.
    • 어떤 수학적 문제를 해결하기 위한 람다(lambda) 계산법의 영향을 받아 만들어짐.
    • 불변성(immutability)
      • 람다 게산법의 기초가 되는 개념으로써 심볼(symbol)의 값이 변경되지 않는다는 개념.
      • 이는 함수형 언어에는 할당문이 전혀 없다는 뜻이기도 하다.
      • 대다수의 함수형 언어가 변수 값을 변경할 수 있는 방법을 제공하기는 하지만, 굉장히 까다로운 조건 아래에서만 가능.
  • 함수형 프로그래밍은 할당문에 대해 규칙을 부과한다.

생각할 거리

  • 각 패러다임은 프로그래머에게서 권한을 박탈한다.
    • 어느 패러다임도 새로운 권한을 부여하지 않는다.
    • 패러다임은 무엇을 해야 할지를 말하기 보다는 무엇을 해서는 안 되는지를 말해준다.
    • goto문, 함수 포인터, 할당문을 박탈. 패러다임이 우리에게 그 이상 가져갈 것은 없다 → 프로그래밍 패러다임은 사실상 이 세가지가 전부이다. 1958년부터 1968년에 걸친 10년 동안 모두 만들어졌고, 이후로 새롭게 등장한 패러다임은 전혀 없다.

결론

  • 패러다임 역사의 교훈은 아키텍처와 어떤 관계가 있나?
    • 아키텍처 경계를 넘나들기 위한 메커니즘으로 다형성을 이용한다.
    • 함수형 프로그래밍을 이용하여 데이터의 위치와 접근 방법에 대해 규칙을 부과한다.
    • 모듈의 기반 알고리즘으로 구조적 프로그래밍을 사용한다.
  • 세 가지 패러다임과 아키텍처의 세 가지 큰 관심사(함수, 컴포넌트 분리, 데이터 관리)가 어떻게 서로 연관되는지 주목하자.
profile
하루하루 꾸준히

0개의 댓글