관리 메뉴

피터의 개발이야기

명령형 vs 선언형 프로그래밍 차이 본문

개발이야기

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

기록하는 백앤드개발자 2020. 12. 9. 08:00
반응형

프로그래밍 설명 중에 명령형 프로그래밍과 선언형 프로그래밍에 대해 자주 접하게 된다. 

 

선언형은 '무엇'을 할 것인지를 말하고,

명령형은 무언가를 작업하기 위한 '방법'을 뜻한다.

 

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

반응형

'개발이야기' 카테고리의 다른 글

기록으로 실력을 쌓자  (0) 2020.12.12
Java 개발자라면 꼭 보아야할 동영상  (0) 2020.12.12
근로기준법 영문 용어 정리  (0) 2020.12.11
SOAP과 REST 비교  (0) 2020.12.10
할건 하고 놀자!  (0) 2020.11.19
Comments