커링은 수학자 하스켈 커리로부터 유래된 이름이고 함수를 변형하는 과정을 말합니다.
함수의 전달인자 몇 개를 미리 채움으로써 더 간단한 함수를 만드는 방법입니다.
커링은 인도 음식인 커리와 아무런 관계가 없습니다.
커링은 수학자 하스켈 커리(Haskell Curry)로 부터 유래되었습니다. (하스켈 프로그래밍 언어가 그의 이름에서 따온 것입니다.)
커링은 이 변형 방법의 원래의 발명가인 모세 쉔핀켈 이름을 따서 쉔필켄이라고도 부릅니다.
// curring function
function curring(num){
// 클로저로 생성된 공간
return function(add){
return num + add;
};
}
var add = curring(5);
var result = add(5);
console.log(result); // 10
다른 함수형 언어에서는 커링 기능이 언어 자체에 내장되어 있어 모든 함수가 기본적으로 커링됩니다.
// 커링된 add()
// 부분적인 인자의 목록을 받는다.
function add(x, y) {
var old_x = x, old_y = y;
if(typeof old_y === 'undefined'){ // 부분적인 적용
return function(new_y){
return old_x + new_y;
}
}
// 전체 인자를 적용
return x + y;
}
console.log(add(3, 5)); // 8
console.log(add(10)(10)); // 20
var add10 = add(10);
console.log(add10(20)); // 30
위 코드에서 처음 add()를 호출할 때, add가 반환하는 내부 함수에 클로저를 만듭니다.
// 커링된 add()
// 부분적인 인자의 목록을 받는다.
function add(x, y) {
if(typeof y === 'undefined'){ // 부분적인 적용
return function(y){
return x + y;
}
}
// 전체 인자를 적용
return x + y;
}
console.log(add(3, 5)); // 8
console.log(add(10)(10)); // 20
var add10 = add(10);
console.log(add10(20)); // 30