🛠️ 처음부터 만드는 Partial — 함수의 일부 인자를 미리 채워두기
# 처음부터 만드는 Partial
Curry와 자주 혼동되지만, Partial은 함수의 일부 인자만 미리 고정하고 나머지는 나중에 받는 패턴입니다.
Curry는 한 번에 하나씩 인자를 받지만, Partial은 여러 인자를 한 번에 고정합니다:
```javascript
// Curry: add(1)(2)(3)
const curried = curry(add);
curried(1)(2)(3); // 6
// Partial: partial(add, 1, 2)(3)
const partial1 = partial(add, 1, 2);
partial1(3); // 6
```
```javascript
function partial(fn, ...args) {
return function(...nextArgs) {
return fn(...args, ...nextArgs);
};
}
// 사용 예제
const add = (a, b, c) => a + b + c;
const add1and2 = partial(add, 1, 2);
console.log(add1and2(3)); // 6
```
```javascript
// API 호출 시 기본값 설정
const fetch = (method, url, options) =>
`${method} ${url}`;
const getUser = partial(fetch, 'GET');
getUser('/api/user', {}); // 'GET /api/user'
// 콜백 함수 사전 설정
const log = (level, timestamp, msg) =>
`[${timestamp}] ${level}: ${msg}`;
const error = partial(log, 'ERROR', new Date().toISOString());
error('Server crashed');
// '[2026-03-09T...] ERROR: Server crashed'
```
```typescript
function partial any>(
fn: T,
...args: any[]
): (...nextArgs: any[]) => ReturnType {
return function(...nextArgs: any[]): ReturnType {
return fn(...args, ...nextArgs);
};
}
```
Partial: 여러 인자를 한 번에 고정
Curry: 하나씩 차례대로 고정
용도: API 래퍼, 콜백 사전 설정, 함수 조합
공식 문서: [MDN - bind()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind)
Curry와 자주 혼동되지만, Partial은 함수의 일부 인자만 미리 고정하고 나머지는 나중에 받는 패턴입니다.
기본 개념
Curry는 한 번에 하나씩 인자를 받지만, Partial은 여러 인자를 한 번에 고정합니다:
```javascript
// Curry: add(1)(2)(3)
const curried = curry(add);
curried(1)(2)(3); // 6
// Partial: partial(add, 1, 2)(3)
const partial1 = partial(add, 1, 2);
partial1(3); // 6
```
직접 만들어보기
```javascript
function partial(fn, ...args) {
return function(...nextArgs) {
return fn(...args, ...nextArgs);
};
}
// 사용 예제
const add = (a, b, c) => a + b + c;
const add1and2 = partial(add, 1, 2);
console.log(add1and2(3)); // 6
```
실전 활용
```javascript
// API 호출 시 기본값 설정
const fetch = (method, url, options) =>
`${method} ${url}`;
const getUser = partial(fetch, 'GET');
getUser('/api/user', {}); // 'GET /api/user'
// 콜백 함수 사전 설정
const log = (level, timestamp, msg) =>
`[${timestamp}] ${level}: ${msg}`;
const error = partial(log, 'ERROR', new Date().toISOString());
error('Server crashed');
// '[2026-03-09T...] ERROR: Server crashed'
```
TypeScript 버전
```typescript
function partial
fn: T,
...args: any[]
): (...nextArgs: any[]) => ReturnType
return function(...nextArgs: any[]): ReturnType
return fn(...args, ...nextArgs);
};
}
```
🎯 핵심 정리
공식 문서: [MDN - bind()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind)
👁 0 views
Comments (0)
💬
No comments yet.
Be the first to comment!