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

자바스크립트에서 Currying을 구현하는 가장 간단한 방법은 클로저를 사용하는 것입니다. 클로저는 자신이 생성된 환경의 변수에 접근할 수 있는 함수입니다. 이를 활용하여 Currying을 구현해보겠습니다.

먼저, add 함수를 예시로 사용하겠습니다. 이 함수는 두 개의 숫자를 받아서 더한 값을 반환하는 함수입니다.

function add(x, y) {
  return x + y;
}

Currying을 적용하여 함수의 파라미터를 변환하는 방법은 다음과 같습니다.

function curry(fn) {
  return function curried(...args) {
    if (args.length >= fn.length) {
      // 함수가 기대하는 인자의 개수만큼 인자가 주어진 경우
      return fn(...args);
    } else {
      // 인자가 충분하지 않은 경우, curried 함수를 재귀적으로 호출하여 인자를 쌓아간다.
      return function(...moreArgs) {
        return curried(...args, ...moreArgs);
      }
    }
  };
}

const curriedAdd = curry(add);
console.log(curriedAdd(1)(2)); // 3
console.log(curriedAdd(5, 10)); // 15

위의 코드에서 curry 함수는 첫 번째 인자로 받은 함수를 Currying하는 함수를 반환합니다. curried 함수는 실제로 Currying된 함수입니다. curried 함수는 fn 함수가 기대하는 인자의 개수만큼 인자가 주어진 경우 fn 함수를 호출하고, 그렇지 않은 경우 curried 함수를 재귀적으로 호출하여 인자를 쌓아갑니다.

Currying된 함수 curriedAdd를 사용해보면, curriedAdd(1)(2)1을 첫 번째 인자로 받아 2를 더한 결과인 3을 반환하고, curriedAdd(5, 10)은 첫 번째 인자로 5를, 두 번째 인자로 10을 받아 더한 결과인 15를 반환합니다.

이처럼 Currying은 함수의 파라미터를 변환하는 강력한 기술로, 자바스크립트에서 많이 활용되는 패턴 중 하나입니다. Currying을 적극 활용하면 코드의 가독성과 재사용성을 높일 수 있습니다.

#Currying #자바스크립트