Front-end/JavaScript

JS FP 3편 - 선언형과 명령형(Imperative vs Declarative)

파리외 개발자 2023. 2. 20. 18:14

객체 지향 프로그래밍은 명령형 프로그래밍이다.

함수형 프로그래밍은 선언형 프로그래밍이다.

깊게 파고들어 간다면 위처럼 단정 지을 수 없지만

OOP와 FP의 차이를 이해하기 위해서는 이렇게 이해해도 무방하다고 생각한다.

 

친구와 약속을 잡은 상황에서 친구는 먼저 약속장소에 도착했고 나에게 
기다리는 장소를 알려주는 상황이다.

명령형 - How

버스에서 내려서 앞으로 120미터 직진 후 우측 82도 각도로 회전하여
40미터 직진하면 내가 기다리는 장소야!

선언형 - What

올리브 영에서 기다리고 있을게!

 

명령형은 어떻게 프로그램의 절차를 밟아가는지에 집중했다고 볼 수 있다.

위 예시에서 기다리는 장소로 오기 위해서 해야 할 절차를 설명하고 있다.

 

선언형은 무엇을 원하는지에 집중했다.

위 예시에서 장소를 알려주고 오는 과정은 프로그램이 알아서 처리하도록 한다.

여기서 보통은 오는 과정을 추상화로 처리한다.

//Imperative vs Declarative
//물잔을 달라는 요구에 기계와 사람에게 명령하는 체계가 다른 이유
//imperative
for (let i = 1; i < 4; i++) {
  console.log(i);
}

//declarative
[1, 2, 3].forEach((item) => console.log(item));

만약 1부터 3까지의 수를 콘솔에 출력하고자 한다면

명령형 프로그래밍에서는 1부터 3까지의 범위를 반복문에 명시를 하고

출력을 한다.

어떻게에 집중한 명령형은 코드에 수의 범위를 명시하고

처리과정을 적어낸 느낌이다.

 

반면 선언형 프로그래밍에서는 1부터 3까지의 숫자를 출력하기를

원한다고 적어내는 느낌이다.

원하는 무엇에 집중된 선언형은

해당 범위의 배열원소들을 출력해줘 라는 느낌으로 작성된다.