요즘 선언적으로 작성하는 코드란 무엇인가에 대해서 생각해봤다.
구글링을 하다보면 선언적인 코드란 작성하는 코드의 포커스가 무엇을 할 것 인가? 인 반면에, 명령적인 코드는 작성하는 코드의 포커스가 무엇을 할 때 어떻게 할 것이냐? 에 포커스를 둔다고 한다.
프로그래머스의 정말 간단한 문제를 보다가 선언적인 코드, 명령적인 코드를 생각하며 작성해봤다.
function solution(arr, divisor) {
const answer = [];
for (const index in arr) {
if (arr[index] % divisor === 0) {
answer.push(arr[index]);
}
}
return answer.length === 0 ? [-1] : answer.sort((a, b) => a - b);
}
위 코드는 명령적으로 작성한 코드이다.
함수 내부를 살펴보면 반복문을 통해서 반복문 내부에서 output 을 위해서 어떤 방식을 거칠것인지 정확히 작성된 걸 확인할 수 있다.
function solution(arr, divisor) {
const answer = arr.filter((num) => num % divisor === 0);
return answer.length === 0 ? [-1] : answer.sort((a, b) => a - b);
}
위 코드는 선언적으로 작성한 코드이다.
array
의 prototype
인 filter
고차함수를 활용한 코드이다. 코드를 살펴보면, output 을 위해 어떤 방식을 거칠 것인가에 대해서 구체적인 기술 보다는, 무엇을 할 것인가 (가령, 난 이 array
를 필터 할거야! 라고 할 수 있겠다.) 에 포커스를 두고 작성한 코드이다.
선언적인 코드는 방식을 추상화 하여 아랫단에 감춰버린다. 그래서 명령적으로 작성된 코드보다 어떤 일이 일어났는지 추론하기 더 쉽다. 쉽게 말해서 이해하기 쉬운 코드가 된다는 것이다.
코드를 작성하는데 있어서 어떻게 코드를 작성하는게 좋다 라는 정답은 없다.
다만 패러다임인데, 요즘 유행하는 패러다임은 함수형 프로그래밍이고, 함수형 프로그래밍은 코드가 선언적으로 작성된다. 함수형 프로그래밍이 무엇이고 어떻게 프로그래밍 하는지 공부하기 전에 선언적인 코드란 무엇인가에 대해서 고민해봤다.