자바스크립트에서 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);
이렇게 하면 curriedSum
은 sum
함수를 Curried 형태로 변환한 것입니다. 이제 curriedSum
을 호출해보겠습니다.
curriedSum(1)(2)(3); // 6
curriedSum(1, 2)(3); // 6
curriedSum(1)(2, 3); // 6
위와 같이 Curried 함수로 변환된 curriedSum
을 호출할 때에는 원하는 인자를 순서대로 전달하면 됩니다. 단, 인자를 하나씩 전달하거나 한 번에 여러 개의 인자를 전달하는 것도 가능합니다.
Currying을 사용하여 함수의 인자를 반복적으로 전달함으로써 코드의 재사용성과 유연성을 높일 수 있습니다. 또한, 함수 조합에 유용하게 사용될 수도 있습니다.
#Currying #자바스크립트