🛠️ 처음부터 만드는 Curry — 여러 인자를 하나씩 받기
Curry란?
여러 개의 인자를 받는 함수를 하나의 인자만 받는 함수의 연쇄로 변환하는 기법입니다.
```javascript
// Before: 여러 인자를 한 번에
const add = (a, b, c) => a + b + c;
add(1, 2, 3); // 6
// After: Curry를 적용하면
const curriedAdd = curry(add);
curriedAdd(1)(2)(3); // 6
```
왜 필요한가?
함수의 부분 적용이 가능해집니다.
```javascript
const curriedAdd = curry((a, b, c) => a + b + c);
const add1 = curriedAdd(1); // a=1로 고정
const result = add1(2)(3); // 6
```
배열과 함께 쓸 때 특히 강력합니다.
```javascript
const addTwo = curry((a, b) => a + b);
const add5 = addTwo(5);
[1, 2, 3].map(add5); // [6, 7, 8]
```
구현하기
```javascript
function curry(fn) {
const arity = fn.length; // 함수가 받는 인자의 개수
return function curried(...args) {
// 필요한 인자를 모두 모았으면 실행
if (args.length >= arity) {
return fn(...args);
}
// 아니면 나머지 인자를 기다리는 함수 반환
return (...nextArgs) => curried(...args, ...nextArgs);
};
}
```
테스트
```javascript
const add3 = curry((a, b, c) => a + b + c);
console.log(add3(1)(2)(3)); // 6
console.log(add3(1, 2)(3)); // 6 — 여러 인자도 가능
const multiply = curry((a, b) => a * b);
const double = multiply(2);
console.log([1, 2, 3].map(double)); // [2, 4, 6]
```
실전 활용
Ramda 같은 함수형 라이브러리는 모든 함수가 자동으로 커링됩니다.
```javascript
const add = R.add; // 이미 커링됨
const add5 = add(5);
add5(3); // 8
```
Curry는 함수형 프로그래밍의 핵심 도구입니다. Redux 미들웨어, 고차 컴포넌트, 데이터 변환 파이프라인 등 실무에서 자주 만날 수 있습니다.
👁 0 views
Comments (0)
💬
No comments yet.
Be the first to comment!