🛠️ 처음부터 만드는 Curry — 인자를 하나씩 넘겨 함수 조립하기
Curry란?
`curry(fn)`은 여러 인자를 받는 함수를 인자를 하나씩(또는 부분적으로) 넘길 수 있는 함수로 변환합니다. 인자가 모두 모이면 원래 함수가 실행됩니다.
```js
const add = (a, b, c) => a + b + c;
const curriedAdd = curry(add);
curriedAdd(1)(2)(3); // 6
curriedAdd(1, 2)(3); // 6 — 부분 적용도 OK
curriedAdd(1)(2, 3); // 6
```
구현
```js
function curry(fn) {
return function curried(...args) {
if (args.length >= fn.length) {
return fn.apply(this, args);
}
return function (...nextArgs) {
return curried.apply(this, [...args, ...nextArgs]);
};
};
}
```
핵심 로직:
1. 지금까지 모인 `args`가 원래 함수의 매개변수 수(`fn.length`) 이상이면 실행
2. 부족하면 새 함수를 반환해서 나머지 인자를 기다림
실전 활용
```js
// 이벤트 로거 조립
const log = curry((level, module, msg) =>
console.log(`[${level}] ${module}: ${msg}`)
);
const warn = log('WARN'); // level 고정
const authWarn = warn('Auth'); // module까지 고정
authWarn('Token expired'); // [WARN] Auth: Token expired
```
앞서 만든 `pipe`와 결합하면 인자가 고정된 함수들을 파이프라인으로 연결할 수 있어 강력합니다.
주의할 점
> 📎 [Lodash `_.curry` 문서](https://lodash.com/docs/4.17.15#curry)
👁 0 views
Comments (0)
💬
No comments yet.
Be the first to comment!