💻 Dev

🛠️ 처음부터 만드는 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`와 결합하면 인자가 고정된 함수들을 파이프라인으로 연결할 수 있어 강력합니다.

주의할 점


  • `fn.length`는 기본값·나머지 매개변수를 세지 않습니다. `(a, b = 0) => {}` → `length`는 1입니다.

  • 가변 인자 함수에는 적합하지 않으니, 고정 인자 함수에 사용하세요.

  • > 📎 [Lodash `_.curry` 문서](https://lodash.com/docs/4.17.15#curry)
    💬 0
    👁 0 views

    Comments (0)

    💬

    No comments yet.

    Be the first to comment!