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

커링(Currying)은 함수의 인자를 여러개를 받는 대신, 하나의 인자를 받는 함수로 변환하는 기법입니다. 이를 통해 함수를 보다 유연하게 조작하고 재사용할 수 있습니다. 이번 글에서는 JavaScript에서 커링을 사용하여 함수의 인자를 변환하는 방법에 대해 알아보겠습니다.

커링의 개념 이해하기

커링은 함수의 첫 번째 인자를 받고, 나머지 인자를 받는 새로운 함수를 반환하는 과정입니다. 이렇게 반환된 새로운 함수는 나중에 추가적인 인자를 받을 수 있습니다. 이렇게 하나씩 인자를 받아가는 방식을 통해, 함수의 재사용성을 높일 수 있습니다.

예를 들어 아래와 같은 add 함수를 커링을 사용하여 변환해보겠습니다.

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

커링 함수 작성하기

아래의 curry 함수는 커링을 적용할 함수를 받고, 첫 번째 인자를 받는 새로운 함수를 반환하는 함수입니다.

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

커링 함수 사용하기

이제 예제에서 작성한 add 함수를 커링 함수를 사용해 변환해보겠습니다.

const curriedAdd = curry(add);

console.log(curriedAdd(1)(2)(3)); // 6
console.log(curriedAdd(1, 2)(3)); // 6
console.log(curriedAdd(1)(2, 3)); // 6
console.log(curriedAdd(1, 2, 3)); // 6

curriedAdd 함수는 첫 번째 인자를 받는 새로운 함수를 반환하고, 해당 함수를 호출하는 과정에서 추가적인 인자를 받을 수 있습니다. 위의 예제에서처럼 curriedAdd 함수에 인자를 하나씩 전달하거나, 한 번에 전달할 수 있습니다. 모든 방식으로 호출하면 동일한 결과를 얻을 수 있습니다.

이렇게 커링을 사용하면 함수의 재사용성을 높여 유연하고 간편하게 인자를 다룰 수 있게 됩니다. 이를 통해 코드의 가독성과 유지보수성을 개선할 수 있습니다.

#javascript #커링