“Imperative programming is like how you do something, and declarative programming is more like what you do.”
출처: Imperative vs Declarative Programming -- Tyler McGinnis
명령형/선언형 프로그래밍에 대해서 알아보다보면, 명령형은 how에 선언형은 what에 초점을 맞춘 프로그래밍 기법이라는 설명이 나온다. 이게 무슨말인지 구체적인 예시를 통해서 알아보자.
(원문: Imperative vs Declarative Programming)
식당에 가서 앉을 자리를 선택할 때,
명령형: 출입구 옆 두번째 창가쪽에 위치한 자리가 비어있네요. 저는 저 자리로 가서 앉을게요.
선언형: 2인입니다. (종업원에게)
명령형/선언형 프로그래밍을 자바스크립트 예시로 확인해보자
// (1)
function double (arr) {
let results = []
for (let i = 0; i < arr.length; i++){
results.push(arr[i] * 2)
}
return results
}
// (2)
function add (arr) {
let result = 0
for (let i = 0; i < arr.length; i++){
result += arr[i]
}
return result
}
map
, reduce
등 함수등을 통해 세부 구현을 추상화한다. // (1)
function double (arr) {
return arr.map((item) => item * 2)
}
// (2)
function add (arr) {
return arr.reduce((prev, current) => prev + current, 0)
}
선언형 프로그래밍에 대표적인 예시는 SQL이 있다. 예를 들어, SELECT * FROM Users WHERE Country='Mexico';
와 같이 SQL에서는 무엇(what)을 할것인지 먼저 초점을 맞추고 그 무엇을 하기 위한 세부 구현은 추상화(abstraction)로 구현한다.
선언형/명령형 둘중 어느 것이 더 좋고 나쁜 것은 없다.