자바스크립트에서 Currying을 사용하여 함수의 인자를 어떻게 반복할 수 있나요?

먼저, Currying을 구현하기 위해 curry라는 helper 함수를 작성해보겠습니다. 이 함수는 원래 함수와 인자를 전달받아 Curried 함수를 반환합니다.

function curry(fn) {
  return function curried(...args) {
    if (args.length >= fn.length) {
      return fn.apply(this, args);
    } else {
      return function(...moreArgs) {
        return curried.apply(this, args.concat(moreArgs));
      }
    }
  };
}

이제 Currying을 적용할 함수를 작성해보겠습니다. 예를 들어, 세 개의 인자를 받아 합을 계산하는 함수를 Currying으로 변환해보겠습니다.

function sum(a, b, c) {
  return a + b + c;
}

const curriedSum = curry(sum);

이렇게 하면 curriedSumsum 함수를 Curried 형태로 변환한 것입니다. 이제 curriedSum을 호출해보겠습니다.

curriedSum(1)(2)(3); // 6
curriedSum(1, 2)(3); // 6
curriedSum(1)(2, 3); // 6

위와 같이 Curried 함수로 변환된 curriedSum을 호출할 때에는 원하는 인자를 순서대로 전달하면 됩니다. 단, 인자를 하나씩 전달하거나 한 번에 여러 개의 인자를 전달하는 것도 가능합니다.

Currying을 사용하여 함수의 인자를 반복적으로 전달함으로써 코드의 재사용성과 유연성을 높일 수 있습니다. 또한, 함수 조합에 유용하게 사용될 수도 있습니다.

#Currying #자바스크립트