명령형 vs 선언형 프로그래밍 차이
프로그래밍 설명 중에 명령형 프로그래밍과 선언형 프로그래밍에 대해 자주 접하게 된다.
선언형은 '무엇'을 할 것인지를 말하고,
명령형은 무언가를 작업하기 위한 '방법'을 뜻한다.
Declarative(선언)
선언형의 대표적인 언어는 HTML,SQL 이 있다.
HTML
<p>
<span style="color: #666666;">
웹페이지는 제목, 본문, 폰트, 그림과 같이 "무엇"을 보여줄 것인지를 묘사하고 있다.
</span>
</p>
HTML은 브라우저에 어떻게 글을 표시를 위 코드를 이해 정의내리고 있다.
이 코드 구문이 어떻게 동작하는지에 대해 신경쓰지 않고 이를 사용한다.
SQL
SELECT * FROM Users WHERE Country='KOREA’;
데이터 처리를 "어떻게" 처리하는 것보다 "무엇을" 수행하는 지에 더 집중되어 있다.
다르게 설명하면, DB는 선언적 SQL을 통해 해석하여 어떻게 데이터를 만들지 PLAN을 추상화 하여 데이터를 가공한다.
Imperative(명령)
명령형 언어는 C, C++,C#, PHP, JAVA와 Assembly, Javascript가 있다.
컴퓨터가 어떻게 동작하는지를 말해주어 데이터의 상태를 변화시크는 구문들에 초점을 둔다.
일반적으로, 조건문, 반목문 그리고 클래스 상속의 사용이 그것이다.
Javascript
// 배열을 파라미터로 받고 각 요소들의 값에 2를 곱하는 함수
function double (arr) {
let results = []
for (let i = 0; i < arr.length; i++){
results.push(arr[i] * 2)
}
return results
}
어떻게 데이터를 받아서 가공할 지에 대해서 설명하고 있다. 명시적으로 배열을 반복하고 원하는 데이터 가공 방법에 대한 단계를 설명하고 있다.
때로는 두 패러다임이 공존하는 것처럼 보이기도 한다.
위의 javascript코드를 선언적인 형태로 바꾸어보면 다음과 같다.
function double (arr) {
return arr.map((item) => item * 2)
}
프로그램이 함수형 프로그래밍, 논리형 프로그래밍, 혹은 제한형 프로그래밍 언어로 쓰이는 경우에 선언형이라고 한다.
Spring프레임워크, JavaScript라이브러리처럼 명령어로 된 언어를 선언적인 함수로 만들어 사용할 때가 있다.
즉, 비선언형인 부분을 캡슐화하여 간편하고 선언적인 형태로 사용할 수 있다.
이러한 선언적인 형태로 짜여진 코드는 가독성과 재사용성을 높일 수 있다는 매력이 있다.
요즘 개발언어들은
- "어떻게"가 아닌 "무엇"을 달성할지를 정의하고
- 그 "무엇을" "어떻게" 달성할지는 추상화되어 있는 것을 사용하거나, 추상화시킨다
- 선언형 방식으로 코드를 작성하면 재사용성이 높아지고, 코드의 간결성을 그대화 할 수 있다.
ㅁ 함께 보면 좋은 사이트
Imperative vs Declarative Programming
A guide to understanding the difference between Imperative and Declarative programming.
ui.dev
명령형(Imperative) 언어와 선언형(Declarative) 언어 - Junseok Yoon, 윤 준석
명령형 패러다임 절차적 또는 객체 지향적이 명령형 패러다임의 아래 범주에 속해 있는데, 이는 C, C++, C#, PHP, Jave와 Assembly와 같은 언어로부터 알 수 있다. 명령형 패러다임은 컴퓨터가 어떻게 동
phobyjun.github.io