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

예를 들어, 다음과 같은 add 함수가 있다고 가정해봅시다.

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

이 함수를 Currying을 사용하여 인자를 확장해보겠습니다.

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

const curriedAdd = curry(add);

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

위의 예시에서 curry 함수는 원래 함수 f를 받아서 새로운 curried 함수를 반환합니다. curried 함수에 인자가 전달될 때마다, 현재까지 전달된 인자들을 저장하고, 전체 인자가 모두 전달되었는지를 검사합니다. 만약 전체 인자가 전달되었다면, 원래 함수 f를 호출하고 결과를 반환합니다. 그렇지 않다면, curried 함수 자체를 반환합니다.

이러한 Currying 기술을 사용하여 함수의 인자를 필요에 따라 더욱 유연하게 확장할 수 있습니다. Currying을 사용하면 함수를 미리 정의하는 대신, 실행 시에 필요한 인자를 전달하면서 동적으로 함수를 생성할 수 있습니다. 이는 프로그래밍에서 모듈화, 재사용성, 코드 유지보수 등을 위해 매우 유용합니다.

#JavaScript #Currying