강좌 & 팁
안녕하세요. 송기석입니다.
하루 24시간. 누구나 같은 시간을 가지고 있지만 쓰는 용도는 모두 다릅니다. 우리는 어떻게 시간을 쓰고 있습니까?
커링
자바스크립트에서는 기본적으로 커링 메소드를 제공하지 않기 때문에 function의 prototype에 curry 모듈를 만들었습니다.
Function.prototype.curry = function() {
var slice = Array.prototype.slice;
var args = slice.apply(arguments);
var that = this;
return function() {
return that.apply(null, args.concat(slice.apply(arguments)));
};
}
커링을 알아 보기 위해 다음과 같은 함수를 만들어 테스트 합니다.
var sum =
function(a, b) {
return a+b;
}
var sum_curry1 =
sum.curry(1);
console.log(sum_curry1(5)); // 6
console.log(sum_curry1(3)); // 4
감이 오십니까? 그럼 하나 더.
var sum_curry2 =
sum.curry(2);
console.log(sum_curry2(5)); // 7
console.log(sum_curry2(3)); // 5
원래 sum
함수는 값을 2개를 받아서 더하는 목적을 가지고 있습니다. 하지만 커링으로 만든 함수는 입력 값이 1개입니다. 보기 쉽게 설명하면 다음과 같다고 생각하면 됩니다.
// var sum_curry1
= sum.curry(1);
sum_curry1(5) = sum(1,
5)
sum_curry1(5) = sum(1,
5)
// var sum_curry2
= sum.curry(2);
sum_curry2(5) = sum(2,
5)
sum_curry2(5) = sum(2,
5)
커링은 인수를 함수와 결합하여 또 다른 함수를 만들도록 합니다.