선언형 프로그래밍은 컴퓨터 프로그램이 '어떤 방법으로' 작업을 수행할지보다 '무엇'이 나타나야 하는지를 설명하는 방식이다. 이는 실행될 알고리즘을 구체적으로 명시해야 하는 명령형 프로그래밍과 대비되는 개념으로, 목표를 명시하되 세부적인 제어 흐름은 직접 기술하지 않는다. 함수형 프로그래밍, 논리형 프로그래밍, 질의 언어 등이 이 범주에 속한다.

배너 광고

개요

선언형 프로그래밍은 크게 두 가지 정의로 통용된다. 첫째는 프로그램이 어떤 방법으로 동작해야 하는지를 나타내기보다 무엇과 같은지를 설명하는 경우이다. 예를 들어 웹 페이지를 구성하는 HTML은 제목, 글꼴, 본문 등 '무엇'이 나타나야 하는지를 묘사할 뿐, 이를 화면에 출력하는 구체적인 방법은 명시하지 않는다. 둘째는 함수형, 논리형, 제한형 프로그래밍 언어로 작성된 프로그램을 통칭하는 의미로 사용된다.

명령형 프로그래밍이 알고리즘을 명시하고 목표를 명시하지 않는다면, 선언형 프로그래밍은 목표를 명시하고 알고리즘을 명시하지 않는다는 점에서 차이가 있다.

명령형 프로그래밍과의 비교

명령형 프로그래밍과 선언형 프로그래밍의 주요 차이점은 다음과 같다.

구분명령형 프로그래밍선언형 프로그래밍
초점어떻게(How) 수행할 것인가무엇(What)을 할 것인가
상태 변화구문을 통해 프로그램 상태를 변화시킴프로그램의 논리에 집중함
주요 요소조건문, 반복문, 알고리즘관계, 함수, 데이터의 기준
예시 언어C, C++, Java, PHPSQL, HTML, Haskell, CSS

주요 유형 및 언어

선언형 프로그래밍은 적용 분야에 따라 다양한 형태로 나타난다.

  • 질의 언어(Query Languages): SQL이 대표적이다. 원하는 자료를 찾기 위한 기준만 제시하며, 데이터베이스가 실제로 자료를 찾는 방법은 명시하지 않는다.
  • 마크업 언어(Markup Languages): HTML은 순서대로 일어나는 사건이 없으므로 전형적인 선언형 언어에 해당한다. 다만 자바스크립트가 추가되어 순차적인 화면 변화가 발생하면 순수성을 잃게 된다.
  • 함수형 프로그래밍: 연산의 순서를 정의하기보다 함수의 입력과 출력을 연결하여 결과를 도출한다. Haskell, Lisp 등이 이에 속한다.
  • 논리형 프로그래밍: 프롤로그(Prolog)와 같이 관계를 정의하고 질문을 통해 답을 구하는 방식이다.

특징 및 한계

선언형 프로그래밍은 명령형 코드에서 '어떻게'를 감추고 '무엇을'만 노출하는 추상화의 일종으로 볼 수 있다. 예를 들어 자바스크립트에서 반복문을 사용하여 배열 요소를 처리하는 대신 map 함수를 사용하는 것은 선언형 스타일을 적용한 사례이다.

그러나 선언형과 명령형의 구분은 항상 명확하지는 않다. 프롤로그는 재귀법이나 특정 연산자를 통해 명시적인 계산을 수행할 수 있으며, SQL 역시 데이터를 삽입하거나 삭제하는 명령형 성격을 포함하고 있다. 또한 많은 선언형 언어들이 내부적으로는 알고리즘을 설명하거나 상세 구현을 포함할 수 있어 엄밀한 의미의 선언형 정의에서 벗어나기도 한다.

참고 자료

5
선언형 프로그래밍선언형 프로그래밍 선언형 프로그래밍(宣言型 프로그래밍, 영어: declarative programming)은 두 가지 뜻으로 통용되고 있다. 한 정의에 따르면, 프로그램이 어떤 방법으로 해야 하는지를 나타내기보다 무엇과 같은지를 설명하는 경우에 "선언형"이라고 한다. 예를 들어, 웹 페이지는 선언형인데 웹페이지는 제목,…https://ko.wikipedia.org/wiki/%EC%84%A0%EC%96%B8%ED%98%95_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D선언형 프로그래밍 언어선언형 프로그래밍 언어 선언형 프로그래밍 언어는 선언형 프로그래밍을 사용하여 해법을 정의하기보다는 문제를 설명하는 고급언어이다. 명령형 프로그래밍 언어는 "어떤 방법"으로 할 것인지에 중점을 두는 반면에, 선언형 프로그래밍 언어는 "무엇"을 할 것인지에 중점을 두고 있다. 이 용어는 전체적으로 명확하지 않아서 때로 물의…https://ko.wikipedia.org/wiki/%EC%84%A0%EC%96%B8%ED%98%95_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%EC%96%B8%EC%96%B4Imperative(명령형) vs. Declarative(선언형) ProgrammingImperative(명령형) vs. Declarative(선언형) Programming 본문 바로가기 --- Swift # Imperative(명령형) vs. Declarative(선언형) Programming Combine을 공부하려는데 두 개의 용어가 빈번하게 등장하니 간단히 개념을 잡고 넘어가자. ### Imper…https://beginthread.tistory.com/164명령형(Imperative) 언어와 선언형(Declarative) 언어 - Junseok Yoon, 윤 준석명령형(Imperative) 언어와 선언형(Declarative) 언어 - Junseok Yoon, 윤 준석 ## 명령형 패러다임 절차적 또는 객체 지향적이 명령형 패러다임의 아래 범주에 속해 있는데, 이는 C, C++, C#, PHP, Jave와 Assembly와 같은 언어로부터 알 수 있다. 명령형 패러다임은 컴퓨터…https://phobyjun.github.io/2019/09/20/%EB%AA%85%EB%A0%B9%ED%98%95(Imperative)-%EC%96%B8%EC%96%B4%EC%99%80-%EC%84%A0%EC%96%B8%ED%98%95(Declarative)-%EC%96%B8%EC%96%B4.html선언형프로그래밍 | 디피의 개발일지선언형프로그래밍 | 디피의 개발일지 Post Cancel # 선언형프로그래밍 # 선언형, 명령형 그리고 추상화 ## 선언형이란? 명령형은 어떻게(How)에, 선언형은 무엇(What)에 집중한다. 선언형은 명령형 코드에서 ‘어떻게’를 감추고 ‘무엇을’만 노출하는 방식의 추상화이다. 일종의 리팩토링이다. 예시를 들면 다음과…https://seongil-shin.github.io/posts/%EC%84%A0%EC%96%B8%ED%98%95/

관련 문서