자바스크립트에서 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)); }; } }; }
이 함수는
fn
을 받아 클로저를 반환합니다. 반환된 클로저에서는 전달된 인자args
의 길이를 체크하여, 인자의 개수가 필요한 인수 개수보다 많거나 같으면fn
을 호출하고, 그렇지 않으면 더 많은 인자를 받기 위해 클로저를 반환합니다. - 화살표 함수를 이용한 Currying
const curry = fn => (...args) => args.length >= fn.length ? fn(...args) : curry(fn.bind(null, ...args));
이 코드는 화살표 함수와
bind
를 이용하여 Currying을 구현합니다.fn
에 필요한 인자의 개수를 체크하여, 인자의 개수가 필요한 인수 개수보다 많거나 같으면fn
을 호출하고, 그렇지 않으면bind
를 이용하여 더 많은 인자를 받을 수 있는 클로저를 반환합니다.
Currying은 함수형 프로그래밍에서 유용하게 사용되며, 코드의 재사용성과 가독성을 높일 수 있습니다. 이를 통해 함수를 자유롭게 조합하고 부분적으로 적용할 수 있으며, 더욱 더 유연하고 효율적인 코드를 작성할 수 있습니다.
#JavaScript #Currying