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

Currying을 구현하기 위해 curry라는 함수를 작성해보겠습니다. 이 함수는 첫 번째 인자를 받고, 해당 인자가 함수를 반환하도록 합니다. 반환된 함수는 다음 인자를 받고 다음 인자를 기존 인자와 함께 실행하는 새로운 함수를 반환합니다. 이러한 과정을 반복하여 필요한 인자를 모두 받았을 때, 최종 결과를 반환하는 함수를 얻을 수 있습니다.

자바스크립트로 Currying을 구현한 코드는 다음과 같습니다:

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

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

const curriedSum = curry(sum);
const result = curriedSum(1)(2)(3); // 1 + 2 + 3 = 6

console.log(result);

위의 예제에서 curry 함수는 첫 번째 인자로 함수 fn을 받습니다. curried 함수는 재귀적으로 호출되며, 현재까지 받은 인자(args)와 새로운 인자(moreArgs)를 합쳐서 다음 호출을 준비합니다. 만약 필요한 인자를 모두 받은 경우에는 fn 함수를 호출하여 최종 값을 반환하고, 그렇지 않은 경우에는 현재까지 받은 인자와 함께 curried 함수를 반환합니다.

Currying을 사용하면 함수의 인자를 순환하며 다양한 활용이 가능해집니다. 이를 통해 한 번 정의한 함수를 다양한 상황에 맞게 재사용할 수 있습니다.

#javascript #currying