🛠️ 처음부터 만드는 Curry — 함수를 단계적으로 호출하기
# 커링(Currying)이란?
여러 개의 인자를 받는 함수를 한 번에 하나씩 인자를 받는 함수 체인으로 변환하는 기법입니다. 함수형 프로그래밍에서 핵심 패턴이며, 부분 적용(Partial Application)의 기초가 됩니다.
```javascript
const curry = (fn) => {
return function curried(...args) {
// 받은 인자가 충분하면 원본 함수 실행
if (args.length >= fn.length) {
return fn(...args);
}
// 부족하면 새로운 함수 반환
return (...nextArgs) => curried(...args, ...nextArgs);
};
};
```
```javascript
const add = (a, b, c) => a + b + c;
const curriedAdd = curry(add);
// 다양한 호출 방식이 모두 가능
curriedAdd(1)(2)(3); // 6
curriedAdd(1, 2)(3); // 6
curriedAdd(1)(2, 3); // 6
curriedAdd(1, 2, 3); // 6
// 부분 적용으로 새로운 함수 생성
const add5 = curriedAdd(5);
add5(10, 15); // 30
```
```javascript
const multiply = (a, b) => a * b;
const curriedMultiply = curry(multiply);
const double = curriedMultiply(2);
const triple = curriedMultiply(3);
[1, 2, 3].map(double); // [2, 4, 6]
[1, 2, 3].map(triple); // [3, 6, 9]
```
커링으로 코드를 더 모듈화하고 재사용 가능하게 만들 수 있습니다.
여러 개의 인자를 받는 함수를 한 번에 하나씩 인자를 받는 함수 체인으로 변환하는 기법입니다. 함수형 프로그래밍에서 핵심 패턴이며, 부분 적용(Partial Application)의 기초가 됩니다.
구현
```javascript
const curry = (fn) => {
return function curried(...args) {
// 받은 인자가 충분하면 원본 함수 실행
if (args.length >= fn.length) {
return fn(...args);
}
// 부족하면 새로운 함수 반환
return (...nextArgs) => curried(...args, ...nextArgs);
};
};
```
사용 예
```javascript
const add = (a, b, c) => a + b + c;
const curriedAdd = curry(add);
// 다양한 호출 방식이 모두 가능
curriedAdd(1)(2)(3); // 6
curriedAdd(1, 2)(3); // 6
curriedAdd(1)(2, 3); // 6
curriedAdd(1, 2, 3); // 6
// 부분 적용으로 새로운 함수 생성
const add5 = curriedAdd(5);
add5(10, 15); // 30
```
실전 활용
```javascript
const multiply = (a, b) => a * b;
const curriedMultiply = curry(multiply);
const double = curriedMultiply(2);
const triple = curriedMultiply(3);
[1, 2, 3].map(double); // [2, 4, 6]
[1, 2, 3].map(triple); // [3, 6, 9]
```
커링으로 코드를 더 모듈화하고 재사용 가능하게 만들 수 있습니다.
👁 0 views
Comments (0)
💬
No comments yet.
Be the first to comment!