func(a,b,c) => func(a)(b)(c)
add(1,2,3) // 6
curriedAdd(1)(2)(3) // 6
// 파라미터 a, b를 받아 더해서 리턴하는 함수 add
const add = (a, b) => a + b;
// 커링을 적용하면
// 첫 번째 함수가 a를 받고, 내부 함수가 b를 받는 형태로 된다.
// 최종적으로 모든 파라미터가 들어오면 add함수를 호출하는 형태
const curriedAdd = (a) => (b) => add(a + b);
const addWithOne = curriedAdd(1);
addWithOne(1); // 2
addWithOne(2); // 3
const curry = (f) => (a) => (b) => f(a, b);
const add = (a, b) => a + b;
add(1, 2); // 3
const curriedAdd = curry(add);
curriedAdd(3)(3); // 6
['1', '10', '101', '1111'].map(parseInt);
parseInt('1', 0) // 1
parseInt('10', 1) // NaN
parseInt('101', 2) // 5
parseInt('1111', 3) // 40
['1', '10', '101', '1111'].map((str) => parseInt(str, 10));
const r_curry = (f) => (b) => (a) => f(a, b);
const parseDecimal = r_curry(parseInt)(10);
['1', '10', '101', '1111'].map(parseDecimal);
이번 글에서는 커링에 대해서 다뤘는데요. 부끄럽게도 저는 처음 듣는 개념이었습니다. 예시를 들어서 설명을 해주셔서 이해가 잘됐습니다. 하지만 사용 예시 같은 부분은 추가적으로 찾아봐야할 거 같습니다. 해당 예시로 이해는 했으나 아직까지는 "굳이..?"라는 생각이 들어서 아직 제가 많이 부족한가봅니다. 하하하