Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript 커링(Currying)으로 배열 요소에 숫자를 곱하는 함수 구현하기

문제 상황

배열을 인자로 받아 또 다른 함수를 반환하는 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를 곱한 값들이 순서대로 담긴 새로운 배열이 정상적으로 반환된 것을 확인할 수 있습니다.