[JS] 명령형 프로그래밍과 선언형 프로그래밍

cojet·2022년 10월 28일
0

JavaScript

목록 보기
3/3
post-thumbnail

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

명령형 프로그래밍

컴퓨터 과학에서 명령형 프로그래밍은 선언형 프로그래밍과 반대되는 개념으로, 프로그래밍의 상태와 상태를 변경시키는 구문의 관점에서 연산을 설명하는 프로그래밍 패러다임의 일종이다. 자연 언어에서의 명령법이 어떤 동작을 할 것인지를 명령으로 표현하듯이, 명령형 프로그램은 컴퓨터가 수행할 명령들을 순서대로 써 놓은 것이다.

https://ko.wikipedia.org/wiki/%EB%AA%85%EB%A0%B9%ED%98%95_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

설명만으로는 매우 난잡해 보이는데 요약하자면 명령형 프로그램은 컴퓨터가 수행할 명령들을 순서대로 써 놓은 것이다. 이는 "어떻게 구현하는가"를 디테일하게 기술하는 것이 관점이다.

아침에 일어나 커피를 마시기 까지의 과정을 예시로 들어보자면
아침에 눈을 뜨고 일어나서 몇 걸음 지나 부엌에 들어가면 커피포트 버튼을 누르고 컵에
커피를넣고....(생략)
이처럼 하나의 일을 어떤 과정을 거쳐서 진행되는가를 풀어 쓴것과 동일하다고 생각된다.

선언형 프로그래밍

한 정의에 따르면, 프로그램이 어떤 방법으로 해야 하는지를 나타내기보다 무엇과 같은지를 설명하는 경우에 선언형이라고 한다.
예르르들어, 웹 페이지는 선언형인데 웹페이지는 제목, 글꼴, 본문, 그림과 같이 무엇이 나타나야 하는지를 묘사하는 것이지 어떤 방법으로 컴퓨터 화면에 페이지를 나타내야 하는지를 묘사하는 것이 아니기 때문이다.

이것은 전통적인 C, Java 와 같은 명령형 프로그래밍 언어와는 다른 접근 방식으로
명령형 프로그래밍 언어는 프로그래머가 실행될 알고리즘을 명시해주어야 하는 것이다.
간단히 말하면, 명려형 프로그램은 알고리즘을 명시하고 목표를 명시하지 않는 데 반해
선언형 프로그램은 목표를 명시하고 알고리즘을 명시하지 않는 것이다.

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%8D

대표적인 선언형 프로그래밍 방식으로는 HTML이 있다.
이는 HTML의 태그에서 쉽게 찾을 수 있는데 우리는 태그를 사용할때 어떤 과정을 코드로 작성하지 않는다. 다만, 무엇이 나타나야 하는지 만을 작성한다.

코드 예시

배열을 입력받고 요소값에 두배를 적용하는 새로운 배열을 출력해보자
(단, 입력에는 숫자 이외의 값이 있을 수 있다.)

명령형 프로그래밍

// 명령형 프로그래밍
function double(arr) {
  let results = [];
  for (let i = 0; i < arr.length; i++) {
    if (typeof arr[i] === "number") {
      results.push(arr[i] * 2);
    }
  }
  return results;
}

console.log(double([1, 2, 3, "", null, undefined, 11])); // [ 2, 4, 6, 22 ]

우리는 보통 for문을 통해 "어떻게" 처리하는지에 대해 묘사를 한다.
이는 for문안에 로직이 점점 쌓이게 만들고 코드의 맥락을 보려면 쌓인 코드 전부를 확인해야한다.
이처럼 규칙성 없는 코드를 작성하다보면 유지보수가 힘들어 진다.

선언형 프로그래밍

// 선언형 프로그래밍
function double(arr) {
  return arr
    .filter((element) => typeof element === "number")
    .map((number) => number * 2);
}

console.log(double([1, 2, 3, "", null, undefined, 11])); // [ 2, 4, 6, 22 ]

map이라는 메소드의 정해진 규칙에 의해서 현재 배열에서 새로운 배열을 만드는데
"어떤 과정"을 거쳐서 만들지만 정했다. 즉, "무엇"을 원하는지에 대한 묘사를 한다.

이처럼 arr에 있는 값들로 해야 할 작업들을 끊어서 연결하면 명령형 프로그래밍보다 간단하고 명료하게 작성할 수 있다.

0개의 댓글