본문 바로가기

stories

2024.1.28 기록 (선언형 프로그래밍이란 무엇일까)

며칠 전 프론트앤드 개발자 면접에 대한 짧은 영상을 본 적이 있었다.

그 중 하나가 오늘 알아 볼 선언형 프로그래밍과, 이와 반대되는 것은 명령형 프로그래밍에 대한 내용이었다

본론으로 들어가기 전에, 먼저 이 이야기는 지금 받는 교육을 진행하며 몇차례 들었던 이야기기도 했다. 그리고 질문들이 어떻게 보면 우리를 조금 더 원리를 파악하고 생각 할 수 있게 하는 사람이 되게 만들어주는 것이라 여기게 되었다.

 

 

나는 항상 이 주제로 주변 사람들과 대화를 나눌 때, 도구를 어떻게 사용하는지 에 비유하여 이야기하곤 한다.

가령 우리는 청소기나 에어프라이어 등 을 사용 할 때 그 기기가 어떠한 방식으로 작동하는 지 알아보기 보다는 그 기기를 어떻게 하면 잘 써먹을 것인가에 대해서 생각하곤 한다.

이것은 선언형 프로그래밍, 선언적 프로그래밍에 가깝다는 예시이다

 

 


.

 

선언형 프로그래밍과, 명령형 프로그래밍에 대한 짧은 비교

알고리즘 수업에서도 자주 마주했던 문제이기도 했는데, filter를 사용한 예시가 있다.

 

 

선언형 프로그래밍

const nums = [1, 2, 3, 4, 5 ,6]
const setNum = nums.filter(num ⇒ num % 2 === 0) 

console.log(setNum);
// [2, 4, 6]

이러한 표현은 우리가 filter라는 메서드를 알고 있다면 금방 접근 할 수 있는 방식이고,

filter라는 메서드를 활용하여 원하는 규칙을 적용하여 값을 얻는 방식이라 할 수 있다.

 

 

명령형 프로그래밍

const nums = [1, 2, 3, 4, 5, 6]
const setNum =[];

for(let i = 0; i < nums.length; i++){
	const result = nums[i]
	if (result % 2 === 0 ){
		setNum[setNum.length] = result;
	}
}

console.log(setNum);

 

명령형 프로그래밍은 우리가 메서드라는 이름의 도구를 사용하지 못했을 때를 상정하는 것과 가깝다.

어떻게 하면 그 값을 나타낼 수 있을까? 와 같은 질문에 답을 하는 것이다.

이렇게 두 표현 방식이 다른 이유는, 작업하는 방식이나 목적이 조금 다르다고 할 수 있겠다.

 

 

나는 지금 프론트앤드의 리액트 과정을 밟고 있기 때문에 조금 더 주어진 도구를 잘 사용 하는 방식의 학습법을 채택했다.

하지만 오직 선언형 프로그래밍 방식을 사용하는 것만이 정답은 아니다. 짧고 간결한 코드는 분명 좋은 코드이겠지만, 예외의 상황에서는 직접 명령형 프로그래밍으로 작성할 줄도 알아야 하는 법이다.

 

또한 자주 사용하게 되는 hook들 또한 내부에 작성되는 조건은 명령형으로 작성되는 부분이 분명히 존재하기 때문에

우리는 상황에 맞게 더 나은 방식을 채택 할 수 있는 것. 그것이 가장 중요한 자세라고 할 수 있겠다.

그러니 내가 사용하고 있는 메서드가 어떤 방식을 채택하고 있는 지, 또 왜 그런 방식을 사용하는 지에 대해서는 항상 의문을 가지고 의심을 품어봐야 하는 법이다.

우리가 우리에게 주어진 도구를 빼앗긴 순간에도 우리를 움직이게 하는 원동력이 될 수 있다. 라는 것이 현시대에 우리가 서있는 모습에 대한 나의 마음가짐 이다.

 

 

참고한 문서
(https://yozm.wishket.com/magazine/detail/2083/)

(https://youtu.be/ZJR6WtDXCr4?si=dRBMGSzDfVB5wlDJ)