커링(Currying)은 함수를 여러 인자를 받는 일련의 함수들로 변환하는 프로그래밍 기법입니다. 커링을 사용하는 이유는 여러 가지가 있습니다:
// 주어진 함수
function sum(a, b, c) {
return a + b + c;
}
// 커링 함수 정의
function curry(func, ...zeroth) {
return function(...wunth) {
return func(...zeroth, ...wunth);
};
}
// 커링 함수를 사용하여 부분적으로 값을 지정한 함수 생성
const curriedSum = curry(sum, 1);
// 커링된 함수 호출
const result = curriedSum(2, 3);
console.log(result); // 6
해당 커링 함수를 보면,
curry(...)를 선언하면서 일반적인 함수랑은 느낌이 다른걸 알 수 있습니다. 보통 함수를 호출할 때는 인자를 나눠준다거나 함수의 로직을 줘서 함수를 실행하는 로직같은건 없었습니다.
하지만 여기를 보면 curry안에 sum을 줘서 내부 func 에 sum이라는 함수로직을 주고, 그 다음 인자로 1을 줍니다.
const curriedSum = curry(sum, 1);
이런식으로 인자를 따로 보내서 저장 시킬 수 있습니다.
그렇게 되면 내부 익명함수 반환되게 됩니다.
...wunth 값으로 전달되는 값은!!
return function(...wunth) {
return func(...zeroth, ...wunth);
};
바로..!
const result = curriedSum(2, 3);
2, 3 을 줌으로서 ...wunth에 2,3이 들어가게 되고, 결로적으로
func(...zeroth, ...wunth) ===> sum(1, 2, 3) 이 전달되게 됨으로써 result 값은 6이 되는 원리입니다.
이러한 구현이 되기 위해서는 자바스크립트의 근본적인 원리인 클로저 개념을 알아야 합니다. 하지만 조금 어려운 개념이기 때문에 그것으 잘설명해준 사이트를 몇 개 소개하겠습니다. 이만 마치도록 하겠습니다. (*ˊᵕˋ*)ノ
클로저 설명
https://ko.javascript.info/closure
커링 설명
https://ko.javascript.info/currying-partials
마지막으로..! 또 다른 커링 함수를 보면서 제대로 이해했는지 확인해보자
function curry(func) {
return function curried(...args) {
if (args.length >= func.length) {
return func.apply(null, args);
} else {
return function(...args2) {
return curried.apply(null, args.concat(args2));
}
}
};
}
function sum(a, b, c) {
return a + b + c;
}
let curriedSum = curry(sum);
alert( curriedSum(1)(2)(3) ); // 6, 모두 커링하기
'자바스크립트 끄적끄적' 카테고리의 다른 글
자바스크립트는 왜 그 모양일까? (1) | 2023.12.20 |
---|---|
html 에서 html 로 데이터 보내기 with 바닐라 자바스크립트 (1) | 2023.12.08 |
[JSX] 자바스크립트 꿀팁 (0) | 2023.05.26 |
타입스크립트 설명 (0) | 2023.04.17 |
자바스크립트로 csv 파일 읽기 방법 (0) | 2022.11.18 |