{{위키데이터 속성 추적}}
{{프로그래밍 패러다임}}
[[파일:Computer-memory-map.png|thumb|컴퓨터 메모리 맵]]
[[컴퓨터 과학]]에서 '''명령형 프로그래밍'''(命令型 프로그래밍, {{llang|en|imperative programming}})은 [[선언형 프로그래밍]]과 반대되는 개념으로, 프로그래밍의 [[상태 (컴퓨터 과학)|상태]]와 상태를 변경시키는 구문의 관점에서 연산을 설명하는 [[프로그래밍 패러다임]]의 일종이다. [[자연 언어]]에서의 [[명령법]]이 어떤 동작을 할 것인지를 명령으로 표현하듯이, 명령형 프로그램은 [[컴퓨터]]가 수행할 명령들을 순서대로 써 놓은 것이다.

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

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

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

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

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

== 명령형 프로그래밍 언어들 ==
명령형 프로그래밍의 전형적인 예는 [[포트란]]과 [[알골 프로그래밍 언어|알골]]이다. [[파스칼 (프로그래밍 언어)|파스칼]], [[C (프로그래밍 언어)|C]], [[에이다 프로그래밍 언어|에이다]]는 또 다른 예이다.

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

== 같이 보기 ==
* [[선언형 프로그래밍]] (대조)
* [[프로그래밍 패러다임]]
* [[절차적 프로그래밍]] ((거의) 비슷한 뜻)

== 참고 자료 ==
* {{언어링크|en}} Pratt, Terrence W. and Marvin V. Zelkowitz. ''Programming Languages: Design and Implementation'', 3rd ed. Englewood Cliffs, N.J.: Prentice Hall, 1996.
* {{언어링크|en}} Sebesta, Robert W. ''Concepts of Programming Languages'', 3rd ed. Reading, Mass.: Addison-Wesley Publishing Company, 1996.

{{프로그래밍 언어의 유형}}
{{전거 통제}}

[[분류:프로그래밍 패러다임]]