함수 합성(Function Composition)은 함수들을 결합하여 새로운 함수를 생성하는 프로그래밍 기법입니다. 이를 통해 코드의 재사용성과 가독성을 높일 수 있습니다.
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));
};
}
};
}
위의 코드는 Currying을 구현하는 curry
함수입니다. 이 함수는 인자로 받은 함수 fn
을 Currying된 함수로 변환하여 반환합니다. 반환된 함수는 인자를 받을 때마다 원래 함수 fn
을 호출하거나 새로운 Currying된 함수를 반환하는 방식으로 동작합니다.
함수 합성하기
이제 Currying된 함수를 사용하여 함수 합성을 구현해보겠습니다.
// 함수 합성 예제
function add(a, b) {
return a + b;
}
function multiply(a, b) {
return a * b;
}
function subtract(a, b) {
return a - b;
}
// Currying된 함수 생성
const curriedAdd = curry(add);
const curriedMultiply = curry(multiply);
const curriedSubtract = curry(subtract);
// 함수 합성
const composedFn = curriedAdd(1)(2); // 첫 번째 인자 1을 받는 curriedAdd 함수를 호출한 후, 두 번째 인자 2를 받는 curriedAdd 함수를 반환
const result = curriedMultiply(composedFn)(3); // composedFn을 받는 curriedMultiply 함수를 호출한 후, 세 번째 인자 3을 받는 curriedMultiply 함수를 반환
console.log(result); // 9
위의 코드는 add
, multiply
, subtract
함수를 정의하고, 이를 Currying된 함수로 변환한 뒤에 함수 합성을 통해 결과를 도출하는 예제입니다. curry
함수로 각 함수를 Currying된 함수로 변환한 후에, 원하는 인자를 순차적으로 넣어가며 함수를 합성할 수 있습니다.
종합
위에서 살펴본 것처럼 자바스크립트에서 Currying을 통해 함수 합성을 구현할 수 있습니다. Currying된 함수를 생성한 뒤에 필요한 인자를 순차적으로 넣어가며 함수를 합성할 수 있습니다. 이를 통해 코드의 재사용성과 가독성을 높일 수 있으며, 복잡한 로직을 간결하게 표현할 수 있습니다.
#Currying #함수합성