| 프로그래밍 패러다임 |
| --- |
| * 행위
* 에이전트 지향
* 배열 지향
* 오토마타 기반
* 병행 컴퓨팅
	+ 상대주의적 프로그래밍
* 데이터 기반
* 선언형 (반의어: 명령형)
	+ 함수형
		- 함수 논리형
		- 순수 함수형
	+ 논리형
		- 가추법
		- Answer set
		- 병행 논리
		- 함수 논리
		- 귀납적 논리
	+ 제약
		- 제약 논리
			* 병행 제약 논리
	+ 데이터플로
		- 플로 기반
		- 반응형
* 동적/스크립트
* 사건 기반
* 함수 레벨 (반의어: 값 레벨)
	+ 포인트 프리 스타일
		- 연결식
* 제네릭
* 명령형 (반의어: 선언형)
	+ 절차적
	+ 객체 지향
* 문학적
* 언어 지향
	+ 자연어 프로그래밍
	+ 규율 지향
	+ 도메인 특화
	+ 문법 지향
	+ 의도적
* 메타프로그래밍
	+ 자동
		- 귀납적 프로그래밍
	+ 반영
		- 속성 지향
	+ 매크로
	+ 템플릿
* 비구조적 (반의어: 구조적)
	+ 배열
* 비결정
* 병렬 컴퓨팅
	+ 프로세스 지향
* 확률론적
* 스택 지향
* 구조적 (반의어: 비구조적)
	+ 블록 구조
	+ 객체 지향
		- 행위자 기반
		- 클래스 기반
		- 병행
		- 프로토타입 기반
		- 관심사의 분리에 따라:
			* 관점 지향
			* 역할 지향
			* 주체 지향
	+ 재귀
* 심볼릭
* 값 레벨 (반의어: 함수 레벨)
* 퀀텀 프로그래밍
 |
| * v
* t
* e
 |

컴퓨터 메모리 맵
컴퓨터 과학에서 **명령형 프로그래밍**(命令型 프로그래밍, 영어: imperative programming)은 선언형 프로그래밍과 반대되는 개념으로, 프로그래밍의 상태와 상태를 변경시키는 구문의 관점에서 연산을 설명하는 프로그래밍 패러다임의 일종이다. 자연 언어에서의 명령법이 어떤 동작을 할 것인지를 명령으로 표현하듯이, 명령형 프로그램은 컴퓨터가 수행할 명령들을 순서대로 써 놓은 것이다.

명령형 프로그래밍 언어는 함수형 프로그래밍이나 논리형 프로그래밍 언어와 같은 다른 형태의 언어와 다르다. 하스켈 같은 함수형 프로그래밍 언어는 구문들을 순서대로 써 놓은 것이 아니며, 명령형 프로그래밍 언어와는 다르게 전역적인 상태가 없다. 프롤로그와 같은 논리 프로그래밍 언어는 "어떻게" 계산을 할지보다는 "무엇"이 계산될 것인지를 정의한다는 생각으로 작성된다.

요약
--

거의 대부분의 컴퓨터 하드웨어는 명령형으로 구현된다. 거의 모든 컴퓨터 하드웨어들이 컴퓨터의 고유 언어인 기계어를 실행하도록 설계되어 있는데, 이것이 명령형으로 씌어 있다. 낮은 수준의 관점에서 프로그램의 상태는 메모리의 내용으로 정의되고, 구문들은 기계어의 명령어로 정의된다. 높은 수준의 언어 구현은 변수와 더 복잡한 구문을 사용하지만, 여전히 같은 패러다임을 따른다. 요리법이나, 공정 점검표같은 것들은 컴퓨터 프로그램은 아니지만, 명령형 프로그래밍과 비슷한 형태의 이해하기 쉬운 개념이다. 각각의 단계의 지시 사항들이 있고, 상태라는 것은 현실 세계에 반영된다. 명령형 프로그래밍의 기본 생각이 개념적으로 친밀하고, 직접적으로 구체화되어 있어서, 대부분의 프로그래밍 언어들은 명령형이다.

보통 할당문은 메모리에 있는 정보에 연산을 수행하고, 결과값을 나중에 사용하기 위해 메모리에 저장한다. 추가로, 고급 명령형 언어는 산술 연산, 함수연산, 결과 값을 메모리에 할당하는 연산을 결합한 복잡한 수식을 계산한다. 반복문은 이런 연속된 구문을 여러번 실행하게 한다. 반복문은 미리 정의된 횟수만큼 반복하기도 하고, 어떤 조건이 바뀔때까지 반복하기도 한다. 조건 분기문은 구문의 덩어리를 어떤 조건이 만족하는 경우에만 실행하게 할 수 있다. 그렇지 않으면, 그 구문의 덩어리를 실행하지 않고 그 다음부터 실행한다. 비조건 분기문은 실행 순서를 프로그램의 다른 부분으로 옮기는 것이다. 여러 언어에서 제공하는 GOTO문, 서브프로그램, 프로시저, 호출문들이 비조건 분기문이다.

역사
--

최초의 명령형 언어는 원시 컴퓨터의 기계어였다. 기계어는 명령이 매우 간단하여 하드웨어를 쉽게 구현할 수 있게 했으나, 복잡한 프로그램을 작성하는 것은 힘들었다. 1954년 IBM의 존 배커스가 개발한 포트란은 기계어의 이런 장애물을 없애고, 복잡한 프로그램을 작성할 수 있는 최초의 주요한 언어였다. 포트란은 컴파일 언어였는데, 변수의 이름을 붙일 수 있고, 복잡한 수식을 계산할 수 있었으며, 서브프로그램과 명령형 언어의 많은 특징을 가지고 있다. 그 후 20년간 여러 가지 주요 고급 명령형 프로그래밍 언어들이 발전하였다. 1950년대 후반과 1960년대에는 수학적 알고리즘을 더 쉽게 표현하기 위하여 알골이 개발되었는데, 몇몇 컴퓨터 운영 체제의 언어로 쓰이기도 했다. 코볼(1960년)과 베이직(1964년)은 프로그래밍 구문을 더 영어와 비슷하게 표현하였다. 1970년대에는 니클라우스 버트가 파스칼을 개발하고, 데니스 리치가 벨 연구소에서 일하던 시절 C를 개발하였다. 버트는 계속해서 모듈라-2, 모듈라-3와 오베론을 개발하였다. 미국 국방부의 필요에 따라, 쟌 이시비아와 허니웰에 있는 팀이 에이다를 설계하였다. 에이다는 보안 프로그래밍 측면에 초점을 맞추었으나 1983년까지 세부 사항을 완성하지 못하였다.

1980년대에는 객체지향 프로그래밍이 빠르게 성장하였다. 객체지향 언어들은 명령형의 형태를 띠고 있으나, 객체를 지원하기 위한 특징을 추가하였다. 그 후 20세기의 마지막 20년 동안 상당히 많은 객체지향 언어들이 개발되었다. 스몰토크-80은 앨런 케이가 1969년에 처음 생각했는데, 1980년에 제록스 팔로 알토 연구센터에서 출시되었다. 시뮬라(세계 최초의 객체 지향 프로그래밍 언어로 알려졌다.) 등의 다른 객체지향 언어를 참고하여 비야네 스트롭스트룹이 C를 바탕으로 하여 C++를 설계했다. C++는 1985년 처음 구현되었다. 1980년대 후반과 1990년대에는 래리 월이 1987년 객체지향 언어의 개념을 수용한 탁월한 명령형 언어인 펄(Perl)을 출시하였다. 귀도 반 로섬이 1990년에 파이썬을 출시하였고, 래스무스 러도르프가 1994년에 PHP를 출시하였으며, 역시 1994년 썬마이크로시스템즈에서 자바가 나왔다.

명령형 프로그래밍 언어들
-------------

명령형 프로그래밍의 전형적인 예는 포트란과 알골이다. 파스칼, C, 에이다는 또 다른 예이다.

분류:명령형 프로그래밍 언어에 더 많은 예가 있다.

읽을거리
----

* 선언형 프로그래밍 (대조)
* 프로그래밍 패러다임
* 절차적 프로그래밍 ((거의) 비슷한 뜻)