맨위로가기

프로그래밍 패러다임

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

프로그래밍 패러다임은 프로그래머에게 프로그램 작성 방식을 제시하는 일종의 관점 또는 스타일이다. 1960년대 구조적 프로그래밍을 시작으로 다양한 접근 방식이 발전해 왔으며, 1978년 로버트 W. 플로이드의 튜링상 강연에서 '프로그래밍 패러다임'이라는 개념이 본격적으로 사용되었다. 초기에는 기계어, 어셈블리어와 같이 하드웨어에 밀접하게 연결된 언어가 사용되었으나, 이후 절차적 프로그래밍, 객체 지향 프로그래밍, 선언형 프로그래밍 등으로 발전했다. 프로그래밍 패러다임은 명령형과 선언형, 절차적과 객체 지향, 함수형과 논리형 등으로 분류되며, 현대에는 여러 패러다임을 지원하는 멀티 패러다임 프로그래밍 언어가 널리 사용된다.

더 읽어볼만한 페이지

  • 프로그래밍 언어 분류 - 하드웨어 기술 언어
    하드웨어 기술 언어(HDL)는 전자 시스템의 구조와 동작을 텍스트 기반으로 표현하는 언어로, 디지털 회로 설계의 핵심 도구로 사용되며, 시뮬레이션 및 디버깅을 통해 설계 검증을 수행한다.
  • 프로그래밍 언어 분류 - 고급 프로그래밍 언어
    고급 프로그래밍 언어는 기계어보다 높은 수준의 추상화를 제공하며, 변수, 객체, 함수 등의 개념을 사용하여 프로그래머가 기계의 세부 사항에서 분리되어 편리하게 프로그래밍할 수 있도록 하는 언어이다.
  • 프로그래밍 언어 주제 - 프로그램 최적화
    프로그램 최적화는 컴퓨터 프로그램의 효율성을 높이는 과정으로, 더 효율적인 구현 방식을 선택하거나 불필요한 기능을 제거하여 문제 해결에 집중하며, 다양한 수준에서 플랫폼 의존적이거나 독립적인 기술을 활용하여 수행되지만, 특정한 품질 지표를 개선하기 위해 다른 측면을 희생하는 트레이드오프가 발생할 수 있다.
  • 프로그래밍 언어 주제 - 구문 (프로그래밍 언어)
    프로그래밍 언어의 구문은 프로그램을 구성하는 규칙의 집합으로, 어휘, 문법, 컨텍스트 세 단계로 나뉘어 단어, 구, 의미 요소의 형성을 정의하며, 정규 표현식과 문맥 자유 문법으로 표현될 수 있다.
  • 프로그래밍 패러다임 - 지식 표현
    지식 표현은 컴퓨터가 인간의 지식을 이해하고 활용하도록 정보를 구조화하는 기술이며, 표현력과 추론 효율성의 균형, 불확실성 처리 등을 핵심 과제로 다양한 기법과 의미 웹 기술을 활용한다.
  • 프로그래밍 패러다임 - 의도적 프로그래밍
    의도적 프로그래밍은 프로그래머의 의도를 명확히 포착하고 활용하여 소프트웨어 개발 생산성을 향상시키기 위한 프로그래밍 패러다임으로, 트리 기반 저장소를 사용해 코드 의미 구조를 보존하고, WYSIWYG 환경에서 도메인 전문가와 협업하며, 코드 상세 수준 조절 및 자동 문서화를 통해 가독성과 유지보수성을 높이는 데 중점을 둔다.
프로그래밍 패러다임
지도
프로그래밍 패러다임
정의프로그래밍의 스타일
특성프로그래머의 코드에 대한 관점과 접근 방식에 영향
분류
명령형프로그램 상태와 상태 변경을 설명
선언형원하는 결과를 설명하고, 어떻게 달성할지는 명시하지 않음
주요 패러다임
명령형 패러다임절차적
객체 지향
선언형 패러다임함수형
논리형
기타 패러다임
종류배열 지향
병행
사건 기반
제네릭
반사

2. 프로그래밍 패러다임의 역사

프로그래밍 패러다임은 컴퓨터 과학연구에서 출발하여, 기존 소프트웨어 개발 관행을 분석한 결과로 나타났다. 이러한 연구 결과는 프로그래밍 관행과 프로그램을 코딩하는 데 사용되는 언어를 설명하고 비교하는 데 기여했다.[5][6] 프로그래밍 패러다임은 프로그래머에게 프로그램의 관점을 제공한다고 할 수 있다.

프로그래밍 언어는 패러다임의 관점에서 설명될 수 있다. 일부 언어는 하나의 패러다임만 지원한다. 예를 들어, 스몰토크객체 지향을 지원하고, 하스켈함수형 프로그래밍을 지원한다. 대부분의 언어는 여러 패러다임을 지원한다. 예를 들어, C++, 오브젝트 파스칼, PHP로 작성된 프로그램은 절차적 프로그래밍, 객체 지향 프로그래밍일 수도 있고, 두 패러다임의 측면을 모두 포함하거나 다른 패러다임을 포함할 수도 있다.[7]

피터 반 로이(Peter Van Roy)에 따른 다양한 프로그래밍 패러다임 개요


여러 패러다임을 지원하는 언어를 사용할 때, 개발자는 어떤 패러다임 요소를 사용할지 선택한다. 그러나 이러한 선택은 패러다임 자체를 고려하지 않을 수도 있다. 개발자는 언어가 제공하는 기능을, 개발자가 아는 범위 내에서 사용하는 경우가 많다. 결과 소스 코드를 패러다임별로 분류하는 것은 종종 사후에 이루어지는 학문적인 활동이다.

많은 프로그래밍 패러다임은 지지하는 기술만큼이나 ''금지''하는 기술로도 잘 알려져 있다. 예를 들어, 순수 함수형 프로그래밍은 사이드 이펙트를 허용하지 않으며, 구조적 프로그래밍은 goto 구문을 허용하지 않는다. 부분적으로 이러한 이유로, 새로운 패러다임은 이전 패러다임에 익숙한 사람들에게 독단적이거나 지나치게 경직된 것으로 여겨지는 경우가 많다.[8] 그러나 특정 기술을 피하면 프로그램 동작을 이해하고, 프로그램의 정확성에 대한 자동 정리 증명을 수행하기가 더 쉬워진다.

멀티 패러다임 프로그래밍 언어가 등장한 이후, 프로그래밍 패러다임과 프로그래밍 언어 간의 관련성은 복잡해졌다. 예를 들어, C++절차적 프로그래밍, 제네릭 프로그래밍, 객체 지향 프로그래밍을 지원하도록 설계되었지만, 설계 시 개별 부분마다 어떤 패러다임을 사용할지 선택해야 한다.

프로그래밍에 대한 다양한 접근 방식이 시간이 지남에 따라 발전해 왔다. 각 접근 방식의 분류는 해당 접근 방식이 처음 개발되었을 때 설명되거나, 종종 한참 뒤에 소급하여 설명되었다. 1960년대 중반부터 옹호된 구조적 프로그래밍은 의식적으로 식별된 초기 접근 방식이다. ''프로그래밍 패러다임'' 개념은 적어도 1978년, 로버트 W. 플로이드의 튜링상 강연 "프로그래밍의 패러다임"에서 시작되었는데, 이는 토마스 쿤이 그의 저서 ''과학 혁명의 구조''(1962)에서 사용한 패러다임의 개념을 인용한다.[11]

2. 1. 초기 프로그래밍 언어 (기계어, 어셈블리어)

초기 프로그래밍 언어는 하드웨어에 밀접하게 연결되어 있었으며, 명확한 패러다임 구분은 없었다.

기계어는 컴퓨터 프로그래밍의 가장 낮은 수준으로, 컴퓨터에 대해 가능한 가장 낮은 수준의 추상화에서 동작을 정의하는 기계 명령어이다. 가장 구체적인 코딩 방식이기 때문에 명령형 프로그래밍으로 분류된다. 때로는 1세대 프로그래밍 언어라고도 불린다.

어셈블리 언어는 기계어 명령어와 메모리 주소에 대한 니모닉을 도입했다. 어셈블리어는 명령형으로 분류되며, 때로는 2세대 프로그래밍 언어라고 불린다.

1960년대에 어셈블리 언어는 라이브러리 복사, 매우 정교한 조건부 매크로 생성 및 전처리 기능, 서브루틴에 대한 CALL, 외부 변수 및 공통 섹션(전역 변수)을 지원하도록 개발되어 READ/WRITE/GET/PUT과 같은 논리 연산자를 사용하여 하드웨어 특정성으로부터의 상당한 코드 재사용과 격리를 가능하게 했다. 어셈블리어는 시간 제약이 있는 시스템에 사용되었으며, 기계가 수행하는 작업을 가장 잘 제어할 수 있기 때문에 종종 임베디드 시스템에 사용된다.

2. 2. 절차적 프로그래밍

절차적 프로그래밍 언어는 3세대 프로그래밍 언어라고도 불리며, 처음에는 고급 프로그래밍 언어로 묘사되었다. 이들은 해결하려는 문제와 관련된 어휘를 지원한다. 예를 들면 다음과 같다.

  • 코볼(COBOL)은 컴퓨터 파일, 이동, 복사와 같은 용어를 사용한다.
  • 포트란(FORTRAN)은 수학 언어 용어를 사용하며, 주로 과학 및 공학 문제를 위해 개발되었다.
  • 알골(ALGOL)은 알고리즘을 정의하기에 적합한 언어가 되는 데 초점을 맞추었으며, 포트란과 마찬가지로 수학 언어 용어를 사용하면서 과학 및 공학 문제를 대상으로 했다.
  • PL/I포인터를 지원하는 하이브리드 상업-과학 범용 언어이다.
  • 베이직(BASIC)은 더 많은 사람들이 프로그램을 작성할 수 있도록 개발되었다.
  • C (프로그래밍 언어)데니스 리치가 1969년에서 1973년 사이에 AT&T 벨 연구소에서 개발한 범용 프로그래밍 언어이다.


이러한 언어들은 절차적 패러다임으로 분류된다. 이들은 컴퓨터 프로그램이 따르는 단계별 프로세스를 직접 제어한다. 따라서 이러한 프로그램의 효능과 알고리즘 효율성은 프로그래머의 능력에 크게 의존한다.

2. 3. 구조적 프로그래밍

1960년대 중반부터 옹호된 구조적 프로그래밍은 의식적으로 식별된 초기 접근 방식이다.[11] 초기 프로그래밍 언어는 명확하게 정의된 프로그래밍 패러다임을 갖지 않았고, 때로는 프로그램에서 goto 문을 광범위하게 사용했다. 이를 자유롭게 사용하면 이해하고 유지 관리하기 어려운 스파게티 코드가 발생했다. 이는 goto 문 사용을 허용하지 않고 보다 구조화된 프로그래밍 구문만 허용하는 구조적 프로그래밍 패러다임의 개발로 이어졌다.[12]

구조적 프로그래밍에서는 goto의 무제한적인 사용을 경계한다.

2. 4. 객체 지향 프로그래밍

절차적 프로그래밍을 개선하려는 시도로 객체 지향 프로그래밍(OOP) 언어, 예를 들어 시뮬라, 스몰토크, C++, 에펠, 파이썬, PHP, 자바, C# 등이 개발되었다. 이러한 언어에서 데이터와 데이터를 조작하는 방법은 객체라는 동일한 코드 단위 내에 있다. 이러한 캡슐화는 객체가 데이터에 접근할 수 있는 유일한 방법이 데이터를 포함하는 객체의 메서드를 통해서라는 것을 보장한다. 따라서 객체를 사용하는 코드에 영향을 미치지 않고 객체의 내부 작동 방식을 변경할 수 있다.

알렉산더 스테파노프, 리처드 스톨먼[13] 등 여러 프로그래머들은 OOP 패러다임과 절차적 패러다임의 효능에 관한 논란을 제기했다. 모든 객체가 연관된 메서드를 가져야 할 필요성은 일부 회의론자들이 OOP를 소프트웨어 비대화와 연관시키도록 이끌었고, 이 딜레마를 해결하려는 시도는 다형성을 통해 이루어졌다.

대부분의 OOP 언어가 3세대 언어이지만, 객체 지향 어셈블리 언어를 만드는 것도 가능하다. High Level Assembly(HLA)는 초기 기원에도 불구하고 고급 데이터 형식과 객체 지향 어셈블리 언어 프로그래밍을 완벽하게 지원하는 예시이다.

2. 5. 선언형 프로그래밍

선언형 프로그래밍은 '무엇을' 계산할 것인지에 초점을 맞추며, 프로그램은 원하는 결과의 속성을 기술한다. SQL과 같은 4세대 언어, 함수형 언어, 논리 프로그래밍 계열이 대표적인 선언형 프로그래밍 패러다임이다.

기호적 프로그래밍은 수식과 프로그램 구성 요소를 데이터로 조작할 수 있는 프로그램을 설명하는 패러다임이다.[4] 따라서 프로그램은 효과적으로 자체를 수정하고 "학습"하는 것처럼 보일 수 있으며, 이는 인공 지능, 전문가 시스템, 자연어 처리, 컴퓨터 게임과 같은 응용 분야에 적합하다. 이 패러다임을 지원하는 언어에는 Lisp와 Prolog가 있다.[14]

미분 가능한 프로그래밍은 일반적으로 자동 미분을 통해 프로그램 전체에서 미분될 수 있도록 프로그램을 구성한다.[15][16]

2. 5. 1. 함수형 프로그래밍

함수형 프로그래밍선언형 프로그래밍의 하위 집합이다. 이 패러다임을 사용해 작성된 프로그램은 함수, 즉 수학적 함수처럼 작동하도록 설계된 코드 블록을 사용한다. 함수형 언어는 할당을 통해 변수 값을 변경하는 것을 권장하지 않으며, 대신 재귀를 많이 사용한다.[4]

순수한 함수형 프로그래밍에서는 부작용이 없어야 한다. 이는 구조적 프로그래밍에서 goto의 무제한적인 사용을 경계하는 것과 유사하다. 이러한 제약은 오래된 프로그래밍 방식에 익숙한 사람들에게는 비현실적이거나 지나치게 엄격하게 느껴질 수 있다. 그러나 이러한 특정 기술을 피함으로써 프로그램의 정확성을 증명하거나 동작을 이해하기 쉬워진다.

프로그래밍 언어에 따라 지원하는 패러다임이 다르다. 예를 들어, 하스켈은 함수형 프로그래밍을 지원한다.

2. 5. 2. 논리 프로그래밍

논리 프로그래밍 패러다임은 계산을 지식 체계에 대한 자동 추론으로 간주한다. 문제 도메인에 대한 사실은 논리 수식으로 표현되며, 프로그램은 문제에 대한 답이 발견될 때까지 또는 수식 집합이 일관성이 없는 것으로 증명될 때까지 해당 수식에 추론 규칙을 적용하여 실행된다.

3. 주요 프로그래밍 패러다임 분류

프로그래밍 패러다임은 컴퓨터 과학연구에서 출발하여, 기존 소프트웨어 개발 관행을 분석한 결과로 나타났다. 프로그래밍 패러다임은 프로그래머에게 프로그램의 관점을 제공하며, 프로그래밍 언어마다 지원하는 패러다임이 다를 수 있다. 일부 언어는 하나의 패러다임만 지원하기도 하고, 대부분의 언어는 여러 패러다임을 지원하여 개발자가 상황에 맞는 패러다임을 선택하여 사용할 수 있게 한다.[5][6]

다양한 프로그래밍 패러다임이 존재하며, 이들은 서로 배타적이지 않고 상호 보완적으로 사용될 수 있다. 주요 프로그래밍 패러다임은 다음과 같다.



많은 프로그래밍 패러다임은 지지하는 기술만큼이나 ''금지''하는 기술로도 잘 알려져 있다. 예를 들어, 순수 함수형 프로그래밍은 사이드 이펙트를 허용하지 않으며, 구조적 프로그래밍은 goto 구문을 허용하지 않는다. 이러한 제약은 프로그램 동작을 이해하고, 프로그램의 정확성에 대한 자동 정리 증명을 수행하기 쉽게 만들어 준다.[8]

3. 1. 명령형 프로그래밍과 선언형 프로그래밍

명령형 프로그래밍은 프로그램이 수행해야 할 과정을 순서대로 작성하는 방식으로, '어떻게' 계산할 것인지에 초점을 맞춘다. 명령형 프로그래밍 언어는 다음과 같은 특징을 갖는다.[7]

  • 연산 순서를 명시하고, 이를 제어하는 구문을 사용한다.
  • 코드의 한 부분에서 상태를 변경하면 다른 부분에서 그 결과를 확인할 수 있다. (사이드 이펙트 허용)
  • 코드 간 통신은 명시적이지 않다.


반면, 선언형 프로그래밍은 '무엇을' 계산할 것인지에 초점을 맞추며, 수행할 연산의 순서를 명시하지 않는다.[7] 대신 시스템에서 사용 가능한 연산들과 각 연산의 실행 조건을 제공한다. 언어의 실행 모델은 어떤 연산이 실행될 수 있는지 추적하고 순서를 독립적으로 선택한다.

절차적 프로그래밍은 명령형 프로그래밍의 한 종류로, 프로그램이 따라야 할 단계별 프로세스를 직접 제어한다. C (프로그래밍 언어), 포트란, 코볼 등이 대표적인 절차적 프로그래밍 언어이다.

선언형 프로그래밍은 문제를 어떻게 해결할 것인지가 아니라 문제 자체를 설명하며, 프로그램은 따라야 할 절차가 아니라 예상 결과에서 찾아야 할 속성 집합으로 구성된다. SQL과 함수형 언어, 논리 프로그래밍 계열이 대표적이다.

함수형 프로그래밍은 선언형 프로그래밍의 하위 집합으로, 함수를 수학적 함수처럼 작동하도록 설계한다. 함수형 언어는 변수 값 변경을 권장하지 않고, 재귀를 많이 사용한다.

논리 프로그래밍은 계산을 지식 체계에 대한 자동 추론으로 간주한다. 문제 도메인에 대한 사실은 논리 수식으로 표현되며, 프로그램은 추론 규칙을 적용하여 실행된다.

3. 2. 절차적 프로그래밍과 객체 지향 프로그래밍

절차적 프로그래밍 언어는 3세대 프로그래밍 언어라고도 불리며, 처음에는 고급 프로그래밍 언어로 묘사되었다. 이들은 해결하려는 문제와 관련된 어휘를 지원한다. 예를 들면 다음과 같다.

  • COmmon Business Oriented Language(코볼)는 컴퓨터 파일, 이동, 복사와 같은 용어를 사용한다.
  • FORmula TRANslation(포트란)은 수학 언어 용어를 사용하며, 주로 과학 및 공학 문제를 위해 개발되었다.
  • ALGOrithmic Language(알골)은 알고리즘을 정의하기에 적합한 언어가 되는 데 초점을 맞추었으며, 포트란과 마찬가지로 수학 언어 용어를 사용하면서 과학 및 공학 문제를 대상으로 했다.
  • Programming Language One(PL/I)은 포인터를 지원하는 하이브리드 상업-과학 범용 언어이다.
  • Beginners All-purpose Symbolic Instruction Code(베이직)는 더 많은 사람들이 프로그램을 작성할 수 있도록 개발되었다.
  • C (프로그래밍 언어)데니스 리치가 1969년에서 1973년 사이에 AT&T 벨 연구소에서 개발한 범용 프로그래밍 언어이다.


이러한 언어들은 절차적 패러다임으로 분류된다. 이들은 컴퓨터 프로그램이 따르는 단계별 프로세스를 직접 제어한다. 따라서 이러한 프로그램의 효능과 알고리즘 효율성은 프로그래머의 능력에 크게 의존한다.

절차적 프로그래밍 언어를 개선하려는 시도로 객체 지향 프로그래밍(OOP) 언어, 예를 들어 시뮬라, 스몰토크, C++, 에펠, 파이썬, PHP, 자바, C# 등이 개발되었다. 이러한 언어에서 데이터와 데이터를 조작하는 방법은 객체라는 동일한 코드 단위 내에 있다. 이러한 캡슐화는 객체가 데이터에 접근할 수 있는 유일한 방법이 데이터를 포함하는 객체의 메서드를 통해서라는 것을 보장한다. 따라서 객체를 사용하는 코드에 영향을 미치지 않고 객체의 내부 작동 방식을 변경할 수 있다.

알렉산더 스테파노프, 리처드 스톨먼[13] 및 다른 프로그래머들은 OOP 패러다임과 절차적 패러다임의 효능에 관한 논란을 제기하였다. 모든 객체가 연관된 메서드를 가져야 할 필요성은 일부 회의론자들이 OOP를 소프트웨어 비대화와 연관시키도록 이끌었고, 이 딜레마를 해결하려는 시도는 다형성을 통해 이루어졌다.

대부분의 OOP 언어가 3세대 언어이지만, 객체 지향 어셈블리 언어를 만드는 것도 가능하다. HLA는 초기 기원에도 불구하고 고급 데이터 형식과 객체 지향 어셈블리 언어 프로그래밍을 완벽하게 지원하는 예시이다. 따라서 서로 다른 프로그래밍 패러다임은 다음 단계로의 발전을 반드시 나타내는 것이 아니라, 옹호자들의 ''동기 부여적인 ''처럼 볼 수 있다. 경쟁하는 패러다임의 효능을 정확하게 비교하는 것은 유사한 엔터티와 프로세스에 적용되는 새롭고 다른 용어와 언어 간의 수많은 구현 차이로 인해 자주 더 어려워진다.

3. 3. 함수형 프로그래밍과 논리 프로그래밍

함수형 프로그래밍선언형 프로그래밍의 하위 집합이다. 이 패러다임을 사용하여 작성된 프로그램은 함수, 즉 수학적 함수처럼 작동하도록 설계된 코드 블록을 사용한다. 함수형 언어는 할당을 통해 변수 값의 변경을 권장하지 않으며, 대신 재귀를 많이 사용한다.[4]

논리 프로그래밍 패러다임은 계산을 지식 체계에 대한 자동 추론으로 간주한다. 문제 도메인에 대한 사실은 논리 수식으로 표현되며, 프로그램은 문제에 대한 답이 발견될 때까지 또는 수식 집합이 일관성이 없는 것으로 증명될 때까지 해당 수식에 추론 규칙을 적용하여 실행된다.

3. 4. 기타 패러다임

관점 지향 프로그래밍(AOP)은 AspectJ를 통해 자바 개발자들에게 알려졌지만, 여러 프로그래밍 언어에서 언어 자체적으로 또는 프레임워크를 통해 구현되는 독립적인 패러다임이다. Aspect는 '관심사' 또는 '관점'으로 해석되며, 한국어로는 관점지향 프로그래밍, 약어로 AOP라고 한다.[4]

반응형 프로그래밍은 데이터 흐름과 변화 전파를 중심으로 프로그램을 구성한다.

병렬 프로그래밍은 여러 프로세서 또는 코어를 활용하여 계산 속도를 높이는 방식이다.

제약 프로그래밍, 메타 프로그래밍, 반사적 프로그래밍 등도 프로그래밍 패러다임으로 간주될 수 있다. 반사적 프로그래밍은 프로그램이 자체를 참조할 수 있게 해주는 기호적 기술이지만, 주요 패러다임과 호환되므로 그 자체로 독립적인 패러다임은 아니다.

그 외에도 다음과 같은 프로그래밍 패러다임이 있다.

  • 개념지향 프로그래밍: 메인 프로그램을 생성할 때 개념을 사용한다.
  • 규칙기반 프로그래밍: 매스매티카에서 사용된다.
  • 테이블지향 프로그래밍: 마이크로소프트 폭스프로에서 사용된다.
  • 파이프라인 프로그래밍: 유닉스 명령줄에서 사용된다.
  • 정책기반 프로그래밍
  • 특성지향 프로그래밍: XDoclet 클래스에 의해 전처리되는 자바 5의 annotation, C#의 특성(Attributes)과 관련있다.
  • 어노테이티브 프로그래밍
  • 미분 가능한 프로그래밍: 일반적으로 자동 미분을 통해 프로그램 전체에서 미분될 수 있도록 프로그램을 구성한다.[15][16]
  • 기호적 프로그래밍: 수식과 프로그램 구성 요소를 데이터로 조작할 수 있는 프로그램을 설명하는 패러다임이다.[4] 프로그램이 자체를 수정하고 학습하는 것처럼 보일 수 있어, 인공 지능, 전문가 시스템, 자연어 처리, 컴퓨터 게임 등에 응용된다. Lisp와 Prolog가 이 패러다임을 지원한다.[14]

4. 멀티 패러다임 프로그래밍 언어

프로그래밍 언어는 패러다임의 관점에서 설명될 수 있다. 일부 언어는 하나의 패러다임만 지원한다. 예를 들어, 스몰토크객체 지향 프로그래밍을 지원하고, 하스켈함수형 프로그래밍을 지원한다. 대부분의 언어는 여러 패러다임을 지원한다. 예를 들어, C++, 오브젝트 파스칼, PHP로 작성된 프로그램은 순수하게 절차적 프로그래밍, 순수하게 객체 지향 프로그래밍일 수도 있고, 두 패러다임의 측면을 모두 포함하거나 다른 패러다임을 포함할 수도 있다.

여러 패러다임을 지원하는 언어를 사용할 때, 개발자는 어떤 패러다임 요소를 사용할지 선택한다. 그러나 이러한 선택은 패러다임 자체를 고려하지 않을 수도 있다. 개발자는 언어가 제공하는 기능을, 개발자가 아는 범위 내에서 사용하는 경우가 많다.

멀티 패러다임 프로그래밍 언어가 등장한 이후, 프로그래밍 패러다임과 프로그래밍 언어 간의 관련성은 복잡해졌다. 예를 들어, C++절차적 프로그래밍, 제네릭 프로그래밍, 객체 지향 프로그래밍을 지원하도록 설계되었지만, 설계 시 개별 부분마다 어떤 패러다임을 사용할지 선택해야 한다. 어떤 프로그램은 모두 절차적 프로그래밍으로 만들고, 또 다른 프로그램은 모두 객체 지향으로 만들고, 또 다른 프로그램은 둘을 혼합해서 만드는 식이다.

5. 비판

일부 프로그래밍 언어 연구자들은 프로그래밍 패러다임 개념을 프로그래밍 언어 분류로서 비판한다. 하퍼(Harper)[9]와 크리슈나무르티(Krishnamurthi)[10]는 많은 프로그래밍 언어가 하나의 패러다임으로 엄격하게 분류될 수 없고, 여러 패러다임의 특징을 포함한다고 주장한다. 다중 패러다임 프로그래밍 언어 비교를 참조하라.

참조

[1] 웹사이트 Multi-Paradigm Programming Language https://developer.mo[...] Mozilla Foundation 2013-06-21
[2] 웹사이트 Overview of the four main programming paradigms http://people.cs.aau[...] Aalborg University 2011-05-09
[3] 웹사이트 Characteristics of declarative programming languages http://cgi.csc.liv.a[...] 2014-02-20
[4] 웹사이트 CSCI/ARTI 4540/6540: First Lecture on Symbolic Programming and LISP http://www.ai.uga.ed[...] University of Georgia 2013-11-20
[5] 웹사이트 Programming Paradigms: What Every Programmer Should Know http://www.info.ucl.[...] info.ucl.ac.be 2014-01-27
[6] 서적 Concepts, Techniques, and Models of Computer Programming https://books.google[...] MIT Press
[7] 웹사이트 Programming paradigms: What are the principles of programming? https://www.ionos.co[...] 2022-05-03
[8] 간행물 'GOTO Considered Harmful' Considered Harmful http://www.ecn.purdu[...] 1987-03
[9] 웹사이트 What, if anything, is a programming-paradigm? http://www.cambridge[...] Cambridge University Press 2017-05-01
[10] 간행물 Teaching programming languages in a post-linnaean age http://dl.acm.org/ci[...] ACM 2008-11
[11] 간행물 The paradigms of programming
[12] 서적 Java 5: Objects First https://books.google[...] Jones & Bartlett Learning
[13] 웹사이트 Mode inheritance, cloning, hooks & OOP (Google Groups Discussion) http://groups.google[...]
[14] 웹사이트 Business glossary: Symbolic programming definition http://www.allbusine[...] 2014-07-30
[15] 간행물 Backpropagation with Callbacks: Foundations for Efficient and Expressive Differentiable Programming http://papers.nips.c[...] Curran Associates, Inc. 2019-02-13
[16] 간행물 On Machine Learning and Programming Languages http://www.sysml.cc/[...] 2019-02-13



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com