프로그래밍 패러다임
위키백과 ― 우리 모두의 백과사전.
프로그래밍 패러다임은 프로그래밍의 패러다임 형태이다. 소프트웨어 공학을 할때의 패러다임 형태인 방법론와 비교된다.
프로그래밍 패러다임은 프로그래머에게 프로그래밍의 관점을 갖게 해 주고, 결정하는 역할을 한다. 예를 들어 객체지향 프로그래밍은 프로그래머들이 프로그램을 상호작용하는 객체들의 집합으로 볼 수 있게 하는 반면에, 함수형 프로그래밍은 상태값을 지니지 않는 함수값들의 연속으로 생각할 수 있게 해준다.
소프트웨어 공학의 서로 다른 무리가 서로 다른 방법론을 지원하듯이, 서로 다른 프로그래밍 언어는 서로 다른 프로그래밍 패러다임을 지원한다. 어떤 언어들은 하나의 특정한 패러다임을 지원하기도 하는데, 스몰토크와 자바가 객체지향 프로그래밍을 지원하는 반면에, 하스켈과 스킴은 함수형 프로그래밍을 지원한다. 여러가지 패러다임을 지원하는 언어들도 있는데, 커먼 리스프, 파이썬, 오즈가 이런 언어들이다.
많은 프로그래밍 패러다임들은 어떤 기법을 금지하거나 어떤 것을 가능하게 하는 것으로 널리 알려져 있다. 예를 들어, 순수 함수형 프로그래밍은 부수효과의 사용을 허용하지 않는다. 구조적 프로그래밍은 GOTO문의 사용을 제한한다. 부분적으로 이런 이유로 인하여 새로운 패러다임들은 종종 과거의 것에 길들여진 사람들에게 교조주의적이거나 지나치게 엄격한 것으로 간주되기도 한다. 하지만 특정 기법을 피하는 것은 프로그래밍 언어의 범용성을 제한하지 않으면서 프로그램의 올바름에 대한 정리를 증명하는 것을 더 쉽게 하고, 더 간단하게 이해할 수 있기도 하다.
프로그래밍 패러다임과 프로그래밍 언어와의 관계는 프로그래밍 언어가 여러 프로그래밍 패러다임을 지원하기도 하기 때문에 복잡할 수도 있다. 예를 들어서 C++는 절차적 프로그래밍, 객체기반 프로그래밍, 객체지향 프로그래밍, 제네릭 프로그래밍의 요소들을 지원하도록 설계되었다. C++에서는 순수하게 절차적 프로그램을 작성할 수 있고, 순수하게 객체지향 프로그램을 작성할 수 있으며, 두 가지 패러다임 모두의 요소를 포함한 프로그램을 작성할 수도 있다.
[편집] 여러 프로그래밍 패러다임
- 구조적 프로그래밍과 비구조적 프로그래밍
- 명령형 프로그래밍과 선언형 프로그래밍
- 메시지 전달 프로그래밍과 명령형 프로그래밍
- 절차적 프로그래밍과 함수형 프로그래밍
- 값수준 프로그래밍과 함수수준 프로그래밍
- 흐름처리 프로그래밍과 이벤트처리 프로그래밍
- 스칼라 프로그래밍과 배열 프로그래밍
- 객체지향 프로그래밍중 클래스기반 프로그래밍과 프로토타입기반 프로그래밍
- 제한형 프로그래밍과 논리형 프로그래밍
- OLE에서의 컴포넌트지향 프로그래밍
- 애스펙트제이의 애스펙트지향 프로그래밍
- 매스매티카의 규칙기반 프로그래밍
- 마이크로소프트 폭스프로의 테이블지향 프로그래밍
- 유닉스 명령줄의 파이프라인 프로그래밍
- 객체기반 프로그래밍
- 탈객체 프로그래밍
- 주체지향 프로그래밍
- 반사적 프로그래밍
- 스프레드시트의 자료흐름 프로그래밍
- 정책기반 프로그래밍
- 어노테이티브 프로그래밍 - http://www.flare.org (영문자료)
- 특성지향 프로그래밍 (어노테이티브 프로그래밍과 같은 것일지도 모른다) (XDoclet 클래스에 의해 전처리되는 자바 5의 annotation; C#에서의 특성(Attributes))
- 개념지향 프로그래밍 (메인 프로그램 생성에 개념을 사용하는 것에 기반되어 있다)
[편집] 읽을거리
- 언어지향 프로그래밍
- ARS기반 프로그래밍
- 문법지향 프로그래밍