맨위로가기

명령형 프로그래밍

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

1. 개요

명령형 프로그래밍은 컴퓨터의 기계어를 시작으로 발전해온 프로그래밍 패러다임으로, 프로그램의 상태를 메모리 내용으로 정의하고 명령어를 통해 상태를 변경하는 방식이다. 초기에는 기계어와 어셈블리어를 사용하였으나, 이후 포트란, 알골, 코볼, 베이직, 파스칼, C, C++, 펄, 파이썬, PHP, 자바 등 다양한 고급 언어들이 등장하며 발전했다. 명령형 프로그래밍은 하드웨어에 가깝고, 각 단계의 지시 사항과 상태 변화가 명확하여 널리 사용되지만, '어떻게' 계산할지를 명시하기 때문에 선언형 프로그래밍과 비교하여 부작용이 발생할 수 있다. 절차적 프로그래밍과 객체 지향 프로그래밍은 명령형 프로그래밍의 한 유형으로, 각각 프로시저와 객체를 활용하여 프로그램의 구조를 개선한다.

더 읽어볼만한 페이지

  • 프로그래밍 패러다임 - 지식 표현
    지식 표현은 컴퓨터가 인간의 지식을 이해하고 활용하도록 정보를 구조화하는 기술이며, 표현력과 추론 효율성의 균형, 불확실성 처리 등을 핵심 과제로 다양한 기법과 의미 웹 기술을 활용한다.
  • 프로그래밍 패러다임 - 의도적 프로그래밍
    의도적 프로그래밍은 프로그래머의 의도를 명확히 포착하고 활용하여 소프트웨어 개발 생산성을 향상시키기 위한 프로그래밍 패러다임으로, 트리 기반 저장소를 사용해 코드 의미 구조를 보존하고, WYSIWYG 환경에서 도메인 전문가와 협업하며, 코드 상세 수준 조절 및 자동 문서화를 통해 가독성과 유지보수성을 높이는 데 중점을 둔다.
명령형 프로그래밍

2. 역사

명령형 프로그래밍 언어의 역사는 컴퓨터 하드웨어의 발전과 밀접하게 관련되어 있다.

최초의 명령형 언어는 컴퓨터 본래의 기계어였으며, 1949년에 기계 코드를 니모닉으로 대체한 저수준 언어인 어셈블리어가 등장했다.

이후, 포트란을 시작으로, 알골, 코볼, 베이직, C, 에이다 등 다양한 프로그래밍 언어가 개발되었다.

1980년대에는 객체 지향 프로그래밍이 빠르게 성장하면서, 스몰토크-80, C++를 시작으로, , 파이썬, PHP, 자바 등 객체 지향 프로그래밍을 지원하는 언어들이 등장하였다.

2. 1. 초기 역사

최초의 명령형 언어는 컴퓨터의 기계어였다. 기계어는 명령이 매우 단순하여 하드웨어 구현은 쉬웠지만, 복잡한 프로그램을 작성하기는 어려웠다. 1954년 IBM존 배커스가 개발한 포트란은 이러한 기계어의 한계를 극복하고 복잡한 프로그램을 작성할 수 있게 한 최초의 주요 프로그래밍 언어였다. 포트란은 컴파일 언어였으며, 변수에 이름을 붙일 수 있고, 복잡한 수식을 계산할 수 있었으며, 서브프로그램 등 명령형 언어의 많은 특징을 가지고 있다.

2. 2. 발전 과정

1950년대 후반과 1960년대에는 수학적 알고리즘을 쉽게 표현하기 위한 알골이 개발되었고, 일부 컴퓨터 운영 체제의 언어로 사용되기도 했다. 1960년대에는 코볼(1960년)과 베이직(1964년)이 개발되어 프로그래밍 구문을 영어와 비슷하게 만들어 프로그래밍의 진입 장벽을 낮추는 데 기여했다.[1] 1970년대에는 니클라우스 비르트파스칼을 개발하고, 데니스 리치벨 연구소에서 C를 개발하였다.[1] 미국 국방부의 지원으로 쟌 이시비아와 허니웰 팀이 에이다를 설계하여 1983년에 처음 발표되었다.[1]

2. 3. 객체 지향 프로그래밍의 등장

1980년대에는 객체 지향 프로그래밍이 빠르게 성장하였다. 객체 지향 언어들은 명령형의 형태를 띠고 있으나, 객체를 지원하기 위한 특징을 추가하였다. 앨런 케이1969년에 처음 생각한 스몰토크-80은 1980년에 제록스 팔로 알토 연구센터에서 출시되었다. 비야네 스트롭스트룹C를 바탕으로 C++를 설계했고, 1985년에 처음 구현되었다. 1980년대 후반과 1990년대에는 래리 월1987년(Perl)을 출시하였고, 귀도 반 로섬1990년파이썬을 출시하였고, 래스무스 러도르프가 1994년PHP를 출시하였으며, 같은 해 썬마이크로시스템즈에서 자바가 나왔다.[1]

3. 명령형 프로그래밍의 특징

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

명령형 프로그래밍에서 일반적으로 사용되는 요소는 다음과 같다.


  • 할당문: 메모리에 있는 정보에 연산을 수행하고, 결과를 나중에 사용하기 위해 메모리에 저장한다. 고급 명령형 언어는 산술 연산, 함수 연산 및 결과 값을 메모리에 할당하는 연산을 결합한 복잡한 수식을 계산할 수 있다.
  • 반복문: 명령어의 실행을 여러 번 반복한다. 반복문은 미리 정의된 횟수만큼 반복하거나, 어떤 조건이 바뀔 때까지 반복할 수 있다. while 루프, do while 루프, for 루프 등이 있다.
  • 조건 분기문: 조건에 따라 명령어의 실행 여부를 결정한다. 조건이 만족하는 경우에만 특정 명령어 덩어리를 실행하고, 그렇지 않으면 실행하지 않고 다음 명령어를 실행한다. 조건문이 대표적이다.
  • 비조건 분기문: 프로그램의 실행 순서를 변경한다. 여러 언어에서 제공하는 GOTO문, 서브루틴 호출, 프로시저 등이 있다.


고급 프로그래밍 언어 개발 초기에, 블록의 도입으로 일련의 문과 선언을 하나의 문처럼 처리할 수 있는 프로그램 구조가 가능해졌다. 이는 서브루틴의 도입과 함께, 복잡한 구조를 단순한 절차적 구조로 계층적으로 분해할 수 있게 하였다.

많은 명령형 프로그래밍 언어(예: 포트란, BASIC, C)는 추상화된 어셈블리 언어이다.[4]

3. 1. 절차적 프로그래밍

절차적 프로그래밍은 프로그램이 하나 이상의 프로시저(서브루틴 또는 함수라고도 함)로 구성되는 명령형 프로그래밍의 한 유형이다. 절차적 프로그래밍이라는 용어는 명령형 프로그래밍과 종종 동의어로 사용되지만, 프로시저의 사용은 명령형 프로그램의 모습과 구성 방식에 큰 영향을 미친다. 상태 변경이 프로시저로 국한되거나 프로시저의 명시적 인자와 반환으로 제한되는 고도로 절차적인 프로그래밍은 구조적 프로그래밍의 한 형태이다. 1960년대 이후로, 구조적 프로그래밍과 모듈식 프로그래밍은 명령형 프로그램의 유지보수성 및 전반적인 품질을 향상시키는 기술로 장려되었다. 객체 지향 프로그래밍은 이러한 접근 방식을 확장하려는 시도이다.

절차적 프로그래밍은 선언적 프로그래밍으로 나아가는 한 단계로 간주될 수 있다. 프로그래머는 특정 프로시저가 결과를 달성하는 세부 사항을 반드시 살펴보지 않고도, 프로시저의 이름, 인자 및 반환 유형(및 관련 주석)을 보기만 해도 특정 프로시저가 수행해야 하는 작업을 알 수 있다. 동시에, 완전한 프로그램은 여전히 명령형인데, 이는 실행될 문과 그 실행 순서를 광범위하게 ''고정''하기 때문이다.

선언형, 명령형, 절차형의 차이를 상품 대금 계산에 비유하면 다음과 같다. (여기서 +는 연산자(연산자, 함수, 절차, 루틴)이다.)

  • 선언형: 100엔 + 200엔의 질문에 300엔의 답을 낸다. 상태는 보지 않는다.
  • 명령형: 100엔 + 200엔의 질문에 300엔의 답을 내고 5% 특전에 의한 15 포인트를 상태에 기억시킨다.
  • 절차형: 100엔 + 200엔의 질문에, 상태로부터의 소비세 10%를 가산하여 경우에 따라 이전의 15 포인트를 할인한 315엔의 답을 낸다.


절차형은 종종 명령문을 순차적으로 실행하거나 기억 영역에 대입하여 상태를 변화시키는 것으로 설명된다. 부작용의 활용은 더 작은 메모리 용량에서 더 효율적인 프로세스 확충을 가져왔으므로, 명령형 패러다임은 폰 노이만형 컴퓨터 프로그램의 기본이 되었다.

프로그래밍 관점에서의 절차형은 명령형 프로그램에 절차의 정의와 호출 기능을 더하여 구조성과 모듈성을 갖춘 패러다임을 의미하며, 고급 언어의 보급 후에는 이 의미가 일반적이 되었다.

부작용을 전제로 한 명령형에 대하여, 참조 투명성을 전제로 하여 연산자의 화이트 박스화를 중시하는 것이 선언형이며, 이러한 프로그래밍 이론 구도가 중시되기 시작한 것은 1970년대부터이다.

4. 주요 명령형 프로그래밍 언어

1954년 IBM존 배커스가 개발한 포트란은 기계어의 한계를 극복하고 복잡한 프로그램을 작성할 수 있게 한 최초의 주요 프로그래밍 언어였다. 포트란은 변수 이름, 복잡한 수식, 서브프로그램 등 현대 명령형 언어의 많은 특징을 가지고 있는 컴파일 언어였다.[5]

이후 20년간 여러 주요 고급 명령형 프로그래밍 언어들이 개발되었다. 1950년대 후반과 1960년대에는 수학적 알고리즘 표현을 위해 알골이 개발되어 일부 컴퓨터 운영 체제의 언어로 사용되었다.[8] 코볼(1960년)과 베이직(1964년)은 프로그래밍 구문을 영어와 유사하게 만들어 가독성을 높였다.[7][9]

1970년대에는 니클라우스 버트가 구조적 프로그래밍을 지원하는 파스칼을 개발했고, 데니스 리치벨 연구소에서 효율성과 이식성이 뛰어난 C를 개발했다.[11] 미국 국방부의 지원으로 쟌 이시비아와 허니웰 팀은 보안 프로그래밍에 초점을 맞춘 에이다를 설계했다.[12]

1980년대에는 객체지향 프로그래밍이 빠르게 성장하면서, 객체 지향 개념을 추가한 명령형 언어들이 등장했다. 비야네 스트롭스트룹C를 바탕으로 C++를 설계했다.[26] 1980년대 후반과 1990년대에는 래리 월(1987년), 귀도 반 로섬파이썬(1990년), 래스무스 러도르프의 PHP(1994년), 썬마이크로시스템즈의 자바(1994년) 등 다양한 명령형 언어들이 출시되었다.

5. 선언형 프로그래밍과의 비교

명령형 프로그래밍은 '어떻게(how)' 계산할 것인지를 명시하는 반면, 선언형 프로그래밍은 '무엇을(what)' 계산할 것인지를 명시한다. 명령형 프로그래밍은 프로그램의 상태를 변경하는 부작용을 수반할 수 있지만, 선언형 프로그래밍은 참조 투명성을 유지하여 부작용을 최소화한다.

상품 대금 계산을 예로 들어 선언형, 명령형, 절차형의 차이를 비교하면 다음과 같다. (+는 연산자)

구분설명
선언형100엔 + 200엔의 질문에 300엔의 답을 낸다. 상태는 보지 않는다.
명령형100엔 + 200엔의 질문에 300엔의 답을 내고 5% 특전에 의한 15 포인트를 상태에 기억시킨다.
절차형100엔 + 200엔의 질문에, 상태로부터의 소비세 10%를 가산하여 경우에 따라 이전의 15 포인트를 할인한 315엔의 답을 낸다.



선언형은 '+'를 단순히 숫자를 더하는 계산으로 하며, 연산자의 계산을 그 정의대로 파악할 수 있다.

명령형은 100 + 200의 답에 5% 특전을 계산식 외부의 상태에 기억시킨다. 계산식 외부의 상태를 변화시키는 것은 imperative(명령적)라고 불린다.

절차형은 100 + 200의 답을 상태 내의 소비세와 대조하여 해석하여 330으로 한다. 계산식 외부의 상태를 고려하며 연산자의 계산을 진행하는 것이 procedural(절차적 지식)라고 불린다.

절차형은 명령문을 순차적으로 실행하거나 기억 영역에 대입하여 상태를 변화시키는 것으로 설명되기도 한다. 부작용의 활용은 더 작은 메모리 용량에서 효율적인 프로세스 확충을 가능하게 했으므로, 명령형 패러다임은 폰 노이만형 컴퓨터 프로그램의 기본이 되었다.

프로그래밍 관점에서의 절차형은 명령형 프로그램에 절차의 정의와 호출 기능을 더하여 구조성과 모듈성을 갖춘 패러다임을 의미하며, 고급 언어의 보급 이후 이 의미가 일반적이 되었다.

1970년대부터 부작용에 의한 연산자의 블랙 박스화 편중을 재검토하면서 명령형에 대한 선언형이라는 프로그래밍 이론 구도가 중시되기 시작했다. 참조 투명성을 전제로 하여 연산자의 화이트 박스화를 중시하는 것이 선언형이다.

선언형에서는 질문과 답에 상태를 포함시켜 명령형과 동등한 표현을 가능하게 한다. 여기에는 이나 모나드가 사용되며, 참조 투명성도 유지된다.

참조

[1] 웹사이트 Javascript Promises— Is There a Better Approach? https://medium.datad[...] 2022-12-10
[2] 웹사이트 Imperative programming: Overview of the oldest programming paradigm https://www.ionos.co[...] 2021-05-21
[3] 문서 Reconfigurable computing is a notable exception.
[4] 서적 Thinking in Java https://books.google[...] Pearson Education
[5] 서적 Comparative Programming Languages, Third Edition Addison-Wesley
[6] 서적 Comparative Programming Languages, Third Edition Addison-Wesley
[7] 서적 Comparative Programming Languages, Third Edition Addison-Wesley
[8] 서적 Comparative Programming Languages, Third Edition Addison-Wesley
[9] 서적 Comparative Programming Languages, Third Edition Addison-Wesley
[10] 서적 Comparative Programming Languages, Third Edition Addison-Wesley
[11] 서적 Comparative Programming Languages, Third Edition Addison-Wesley
[12] 웹사이트 Memory Layout of C Programs https://www.geeksfor[...] 2011-09-12
[13] 서적 The C Programming Language Second Edition Prentice Hall
[14] 서적 Comparative Programming Languages, Third Edition Addison-Wesley
[15] 서적 The Linux Programming Interface No Starch Press
[16] 서적 The Linux Programming Interface No Starch Press
[17] 서적 The C Programming Language Second Edition Prentice Hall
[18] 서적 The C Programming Language Second Edition Prentice Hall
[19] 서적 Comparative Programming Languages, Third Edition Addison-Wesley
[20] 서적 The C++ Programming Language, Fourth Edition Addison-Wesley
[21] 서적 Comparative Programming Languages, Third Edition Addison-Wesley
[22] 서적 Comparative Programming Languages, Third Edition Addison-Wesley
[23] 서적 Comparative Programming Languages, Third Edition Addison-Wesley
[24] 서적 Comparative Programming Languages, Third Edition Addison-Wesley
[25] 서적 The C++ Programming Language, Fourth Edition Addison-Wesley
[26] 서적 The C++ Programming Language, Fourth Edition Addison-Wesley
[27] 서적 The C++ Programming Language, Fourth Edition Addison-Wesley



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

문의하기 : help@durumis.com