문제 상황
배열을 인자로 받아 또 다른 함수를 반환하는 JavaScript 함수를 작성해야 합니다. 반환된 함수는 숫자를 하나 더 인자로 받으며, 최종적으로 첫 번째 함수에 전달된 배열의 각 요소와 두 번째 함수에 전달된 숫자를 곱한 값들로 이루어진 새로운 배열을 반환합니다.
이처럼 함수가 여러 개의 인자를 한 번에 받지 않고, 하나씩 순차적으로 받는 여러 단계의 함수로 분리되는 패턴을 함수형 프로그래밍에서는 커링(Currying)이라고 부릅니다.
예제 코드
다음은 화살표 함수를 연결한 형태로 구현한 코드입니다.
const arr = [2, 5, 2, 7, 8, 4];
const num = 4;
const produceWith = (arr = []) => (num) => {
const res = arr.map(el => {
return el * num;
});
return res;
};
console.log(produceWith(arr)(num));
코드 동작 원리
produceWith는 배열arr을 먼저 받아 내부 함수를 반환하는 고차 함수(Higher-Order Function)입니다.- 반환된 내부 함수는 숫자
num을 인자로 받습니다. - 내부에서는
map()메서드를 사용해 원본 배열을 변경하지 않으면서 각 요소에num을 곱한 새로운 배열을 생성합니다.
실행 결과
위 코드를 실행하면 콘솔에 다음과 같이 출력됩니다.
[ 8, 20, 8, 28, 32, 16 ]
배열의 각 요소(2, 5, 2, 7, 8, 4)에 4를 곱한 값들이 순서대로 담긴 새로운 배열이 정상적으로 반환된 것을 확인할 수 있습니다.