명령형 vs 선언형 프로그래밍

de_sj_awa·2021년 5월 17일
2

명령형 프로그래밍은 컴퓨터가 어떻게 행동해야 하는지를 프로그래밍하는 것이고, 선언형 프로그래밍은 컴퓨터가 무엇을 해야할지를 프로그래밍하는 것이다.

1. 명령형 프로그래밍

컴퓨터 과학에서 명령형 프로그래밍(Imperative programming)은 선언형 프로그래밍과 반대되는 개념으로, 프로그래밍의 상태와 상태를 변경시키는 구문의 관점에서 연산을 설명하는 프로그래밍 패러다임의 일종이다.

자연 언어에서의 명령법이 어떤 동작을 할 것인지를 명령으롶현하듯이, 명령형 프로그램은 컴퓨터가 수행할 명령들을 순서대로 써 놓은 것이다.

  • 명령형 프로그래밍 언어 : Fortran, ALGOL, C, C++, C#, Java, Pascal

2. 선언형 프로그래밍

선언형 프로그래밍은 두 가지 뜻으로 통용되고 있다.

한 정의에 따르면 프로그램이 어떤 방법으로 해야하는지를 나타내기 보다는 무엇과 같은지를 설명하는 경우에 "선언형"이라고 한다. 예를 들어, 웹페이지는 선언형인데 웹페이지는 선언형인데 웹페이지는 제목, 글꼴, 본문, 그림과 같이 "무엇"이 나타나야 하는지를 묘사하는 것이지 "어떤 방법"으로 컴퓨터 화면에 페이지를 나타내야 하는지를 묘사하는 것이 아니기 때문이다.

또 다른 정의에 따르면, 프로그램이 함수형 프로그래밍 언어, 논리형 프로그래밍 언어, 혹은 제한형 프로그래밍 언어로 쓰인 경우에 "선언형"이라고 한다. 여기서 "선언형 언어"라는 것은 명령형 언어와 대비되는 이런 프로그래밍 언어들을 통칭하는 것이다.

이 두가지 정의는 서로 겹치는 부분도 있다. 특히, 제한형 프로그래밍과 논리형 프로그래밍은 필요한 해의 특성을 설명하고(무엇) 그 해를 찾는데 사용하는 실제 알고리즘을 설명하지 않는다(어떤 방법). 그러나 대부분의 논리형과 제한형 언어들은 알고리즘을 설명할 수 있고, 상세한 부분을 구현할 수 있어서 첫 번째 정의를 따르는 엄밀한 의미의 선언형 프로그래밍 언어는 아니다.

마찬가지로, 명령형 프로그래밍 언어로 프로그램을 작성할 수도 있다. 라이브러리와 프레임워크 내부의 비선언형 부분을 캡슐화하여 이렇게 할 수 있다.

  • 함수형 프로그래밍 언어
    함수형 : Haskell
    논리형 : Prolog
    제한형 : Oz

3. 명령형 프로그래밍과 선언형 프로그래밍의 차이점

두 패러다임의 차이점은 다음과 같다.

  • 명령형 : 알고리즘은 명시하고 목표는 명시하지 않는다.
  • 선언형 : 목표를 명시하고 알고리즘을 명시하지 않는다.

위처럼 명령형은 HOW(어떻게 할 것인지를 설명한다), 선언형은 WHAT(무엇을 할 것인가 정의한다)의 개념이다. 그렇기 때문에 선언형에서는 구체적인 문제 해결 방법이 나와 있지 않다.

예시는 다음과 같다.

  • 명령형
    횡단보도까지 약 99m 이동(성남대로331번길),
    횡단보도를 이용하여 경기성남분당경찰서 방면으로 횡단,
    횡단보도까지 1개의 횡단보도를 지나 약 612m 이동,
    횡단보도를 이용하여 메르세데스벤츠코리아더클래스효성분당전시장 방면으로 횡단,
    네이버까지 약 50m 이동(불정로).

  • 선언형
    출발 : 경기도 성남시 분당구 성남대로 333,
    도착 : 네이버 주소는 경기도 성남시 분당구 불정로 6.

참고

profile
이것저것 관심많은 개발자.

0개의 댓글