etc

명령형 vs 선언형 프로그래밍의 패러다임

re-hwi 2025. 1. 15. 14:06

서론

최근 리액트를 다시 공부하며 명령형과 선언형 프로그래밍에 대해서 공부했다. 이 두 가지 프로그래밍 패러다임은 코드를 작성하는 방식뿐만 아니라 문제를 해결하는 사고방식에서도 큰 차이를 보인다.

 

특히 리액트와 같은 라이브러리는 선언형 프로그래밍의 장점을 극대화하여 개발자의 생산성을 높이고, 코드의 가독성을 개선하는 데 초점을 맞춘다.


명령형과 선언형 프로그래밍이 구체적으로 무엇을 의미하는지, 그리고 실제로 코드에 어떻게 적용되는지 궁금해졌다. 이번 글에서는 이 두 가지 프로그래밍 패러다임의 개념과 차이점, 그리고 각각의 장단점에 대해 알아보고자 한다.


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

명령형 프로그래밍은 어떤 일을 하는 방법이고 선언형은 무엇을 하는가에 더 가깝다. Tyler McGinnis

 

 

위 문장은 명령형과 선언형의 차이에 대해 설명할 때 가장 일반적으로 나오는 문장이다. 하지만 나는 이 문장으로는 이해가 되질 않아 조금 더 찾아봤는데 코드의 차이를 보는게 가장 명확하게 와닿았던 것 같다. 

명령형 프로그래밍

코드의 로직을 개발자가 직접 구현하는 방법

 

무엇을 원하는지 개발자가 직접 로직을 구현하여 프로그래밍 하는 것이다. 예를 들어 택시를 탈 때 목적지를 말하기보단 어떻게 가는지를 설명하는 것이다.

 

코드는 다음과 같다.

function double(arr) {
  let results = [];
  for (let i = 0; i < arr.length; i++) {
    results.push(arr[i] * 2);
  }
  return results;
}

위 코드는 배열에 있는 요소에 2를 곱한 뒤 리턴하는 함수이다. 이 함수는 내부에 어떤 방법으로 결과를 리턴하는지 작성되어 있다. 이렇게 내부 동작에 초점을 맞추는 방식이 명령형 프로그래밍 이다.

 

선언형 프로그래밍

코드의 로직보다는 결과에 초점을 맞추는 방법

 

어떻게 작동하는지는 모르지만 결과를 예측할 수 있도록 코드를 작성하는 방법이다. 코드는 다음과 같다. 

function double (arr) {
  return arr.map((item) => item * 2)
}

 

위 두 가지의 코드는 모두 내부 요소에 2를 곱한 뒤 리턴한다는 같은 기능을 수행한다. 하지만 명령형 프로그래밍으로 작성된 double 함수는 어떻게 2씩 곱하고 배열에 담고 리턴하는 모든 과정을 개발자가 구현해야한다.

 

하지만 선언형으로 작성된 코드는 map을 이용해 간단히 같은 함수를 구현했다. map에 내부 동작이 어떻게 돌아가는지 모르더라도 해당 함수에 익숙하기만 하다면 훨씬 가독성있게 코드를 볼 수 있을 것이다. 

 

마무리

"명령형 프로그래밍은 문제를 해결하는 방법을 컴퓨터에게 직접 설명을 해주는 방법이고 선언형 프로그래밍은 해결방식은 컴퓨터에게 위임하는 방법이다."

 

처음에는 이 문장이 어떤 의미인지 헷갈렸지만 이해하고 나니 명령형과 선언형의 차이를 명확하게 설명하는 문장인 것 같다. 코드를 작성할 때 선언형 프로그래밍을 지향하라는 말이 있듯이 선언형은 명령형이 가진 많은 단점을 해결할 수 있는 방법이다. 

 

하지만 선언형 프로그래밍을 잘 사용하려면 언어가 가진 내장 함수들에 익숙해져야 장점이 극대화 되는 것 같다. 나도 선언형 프로그래밍에 익숙해지기 위해 JS 코어를 좀 더 공부해야 할 것 같다. 

 

참고자료

https://ui.dev/imperative-vs-declarative-programming

 

Imperative vs Declarative Programming

A guide to understanding the difference between Imperative and Declarative programming.

ui.dev

https://iborymagic.tistory.com/73

 

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

명령형 프로그래밍은 절차적 프로그래밍이라고도 하는데, 최근에 우테코 미션을 하다가 요런 말을 들은 적이 있다. 전반적으로, 너무 절차적 프로그래밍으로 코드를 작성하는 경향이 있습니다.

iborymagic.tistory.com

 

반응형