Currying
Currying - Explanation
Problem Summary
Write a curry function that transforms a function into its curried form.
Go to Problem →Detailed Explanation
이 문제는 **커링(currying)** 패턴을 학습합니다. 함수형 프로그래밍의 핵심 기법 중 하나입니다. **커링이란?** 여러 인수를 받는 함수를 하나씩 인수를 받는 함수들의 체인으로 변환하는 것입니다: `f(a, b, c)` → `f(a)(b)(c)` **동작 원리** 1. 현재까지 받은 인수 개수와 필요한 인수 개수 비교 2. 충분하면 원본 함수 실행 3. 부족하면 더 많은 인수를 받는 새 함수 반환 **curry((a, b, c) => a + b + c)(1)(2)(3) 실행** 1. curried(1): args=[1], 필요 3개 → 함수 반환 2. 반환된 함수(2): args=[1,2], 필요 3개 → 함수 반환 3. 반환된 함수(3): args=[1,2,3], 필요 3개 → 실행! 결과: 6 **fn.length** 함수의 매개변수 개수를 반환합니다: `((a, b, c) => {}).length` → 3 **커링의 장점** ```javascript const add = curry((a, b, c) => a + b + c); const add5 = add(5); // 첫 인수 고정 const add5and10 = add5(10); // 두 번째 인수도 고정 add5and10(3); // 18 ``` **부분 적용과의 차이** 커링은 항상 하나의 인수를 받지만, 이 구현은 여러 인수를 한 번에 받을 수도 있습니다 (유연한 커링).
Solution Code
function curry(fn) {
return function curried(...args) {
if (args.length >= fn.length) {
return fn.apply(this, args);
}
return (...more) => curried(...args, ...more);
};
}Key Concepts from This Problem
Common Mistakes
Hints
Complexity Analysis
Time Complexity
O(n)
Grows linearly with input size
Space Complexity
O(n)
Uses memory proportional to input size