자바스크립트에서 Currying을 사용하여 함수의 부분 집합을 어떻게 정의할 수 있나요?
Currying을 사용하여 함수의 부분 집합을 정의하는 방법은 다음과 같습니다:
- 원본 함수를 currying 함수로 변환합니다. Currying 함수는 원본 함수의 일부 인수를 인자로 받아 새로운 함수를 반환하는 함수입니다.
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));
};
}
};
}
- 부분 집합을 생성하려는 원본 함수를 정의합니다. 예를 들어, 덧셈 함수를 부분 집합으로 정의하는 경우:
function add(a, b, c) {
return a + b + c;
}
const addPartial = curry(add);
const addOne = addPartial(1); // 첫 번째 인수를 1로 고정한 부분 집합 함수 생성
const addTwo = addPartial(2); // 첫 번째 인수를 2로 고정한 부분 집합 함수 생성
console.log(addOne(2, 3)); // 1 + 2 + 3 = 6
console.log(addTwo(3, 4)); // 2 + 3 + 4 = 9
위 예제에서 curry
함수를 사용하여 원본 함수 add
를 Currying 함수로 변환합니다. 그런 다음 addPartial
을 사용하여 첫 번째 인수를 고정한 부분 집합 함수 addOne
과 addTwo
를 생성합니다. addOne
은 첫 번째 인수로 1을 받아들이고, addTwo
는 첫 번째 인수로 2를 받아들입니다. 이렇게 생성된 부분 집합 함수들은 나중에 필요한 인수를 추가로 받아 원본 함수를 호출하며, 원하는 결과를 얻을 수 있습니다.
Currying을 사용하면 함수의 재사용성과 확장성을 높일 수 있습니다. 부분 집합에서 불필요한 인수를 미리 고정하여 함수를 호출하는 방식으로 코드를 더 간결하고 유연하게 작성할 수 있습니다.