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

배너 광고

개요

선언형 프로그래밍은 프로그램이 어떤 방법으로 동작해야 하는지를 나타내기보다 무엇과 같은지를 설명하는 방식이다. 예를 들어 웹 페이지를 구성하는 HTML은 제목, 글꼴, 본문 등 '무엇'이 나타나야 하는지를 묘사할 뿐, 이를 화면에 출력하는 구체적인 방법은 명시하지 않는다. 또한 함수형, 논리형, 제한형 프로그래밍 언어로 작성된 프로그램을 통칭하는 의미로도 사용된다. 명령형 프로그래밍이 알고리즘을 명시하고 목표를 명시하지 않는다면, 선언형 프로그래밍은 목표를 명시하고 알고리즘을 명시하지 않는다는 점에서 차이가 있다.

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

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

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

명령형 패러다임은 하드웨어의 동작과 밀접한 관련이 있으며 조건문과 반복문을 주로 사용한다. 반면 선언형 패러다임은 프로그램의 제어 흐름을 묘사하지 않고 논리 자체에 초점을 맞춘다.

주요 유형 및 언어

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

  • 질의 언어(Query Languages): SQL이 대표적이다. 원하는 자료를 찾기 위한 기준만 제시하며, 데이터베이스가 실제로 자료를 찾는 방법은 명시하지 않는다.
  • 마크업 언어(Markup Languages): HTML과 XML은 전형적인 선언형 언어에 해당한다. 문서의 구조와 요소를 정의할 뿐 순차적인 사건의 흐름을 기술하지 않는다.
  • 함수형 프로그래밍: 연산의 순서를 정의하기보다 함수의 입력과 출력을 연결하여 결과를 도출한다. Haskell, Lisp 등이 이에 속하며 부작용을 최소화하려 노력한다.
  • 논리형 프로그래밍: 프롤로그(Prolog)와 같이 사실과 규칙 사이의 관계를 정의하고 질문을 통해 답을 구하는 방식이다.

특징 및 장점

선언형 프로그래밍은 명령형 코드에서 '어떻게'를 감추고 '무엇을'만 노출하는 추상화의 일종이다. 이러한 특성은 다음과 같은 장점을 제공한다.

  1. 가독성 향상: 코드의 의도가 명확하게 드러나므로 유지보수가 용이하다.
  2. 병렬화 용이: 제어 흐름과 상태 변화가 적어 병렬 프로그램을 작성할 때 복잡성을 크게 줄일 수 있다.
  3. 부작용 감소: 함수형 프로그래밍 등에서는 상태 변경을 최소화하여 예측 가능한 코드를 작성할 수 있게 한다.

한계

선언형과 명령형의 구분은 항상 명확하지는 않다. 프롤로그는 재귀법이나 특정 연산자를 통해 명시적인 계산을 수행할 수 있으며, 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%8DDeclarative programmingDeclarative programming In computer science, declarative programming is a programming paradigm that expresses the logic of a computation without describing its control flow. Many…https://en.wikipedia.org/wiki/Declarative_programmingCS101 - (Other) Programming languagesCS101 - (Other) Programming languages # (Other) Programming languages # The variety of languages There are many different programming languages available. The language sometimes t…https://liucs.net/cs101s18/n7-languages.html프로그래밍 기법프로그래밍 기법 | [정보통신기술용어해설] | 검색 | | --- | --- | # Programming Methodology 프로그래밍 기법, 프로그래밍 방법론, 프로그래밍 패러다임 ## Declarative Programming, 선언형 프로그래밍 | (2023-11-19) | | --- | ▷ Top ▷ 정보기술(…http://ktword.co.kr/test/view/view.php/view.php?no=6001명령형(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

관련 문서