
커링(Currying)은 여러 개의 인자를 받는 함수를 단일 인자를 받는 함수들의 체인으로 변환하는 기술이다.
여러 개의 인자를 받는 하나의 함수 -> 각각의 인자를 받는 여러 개의 함수로 쪼개어 호출
커링은 여러 개의 인자를 받는 함수를 인자를 하나씩 받는 함수들로 변환하는 과정입니다. 이 과정에서 각 단계마다 새로운 함수를 반환하기 때문에, 커링 함수는 고차 함수이다.
커링을 사용할 때 인자의 순서를 잘 고려하는 것이 매우 중요하다.
앞에 위치한 인자는 변동 가능성이 적은 값으로 설정하는 것이 좋다.
=> 한 번 설정한 값을 여러 곳에서 재사용할 수 있다.
뒤에 위치한 인자는 변동 가능성이 높은 값으로 설정하는 것이 좋다.
=> 동일한 설정을 유지하면서도 다양한 값을 쉽게 전달할 수 있다.
[피자 주문하기]
피자 주문하는 단계
피자 종류 선택 -> 피자 크기 선택 -> 피자 토핑 추가
// 피자 종류, 크기, 토핑을 모두 한 번에 지정해야 하므로, 매번 모든 인자를 전달해야 한다.
function orderPizza(type, size, topping) {
return `Order: ${size} ${type} pizza with ${topping}`;
}
console.log(orderPizza('Pepperoni', 'Large', 'Extra cheese'));
function orderPizza(type) {
return function(size) {
return function(topping) {
return `Order: ${size} ${type} pizza with ${topping}`;
};
};
}
const chooseType = orderPizza('Pepperoni');
const chooseSize = chooseType('Large');
const completeOrder = chooseSize('Extra cheese');
console.log(completeOrder);
// 활용
// 첫 번째 단계(페퍼로니 선택) 선택 결과를 저장해두고 활용
const orderPepperoni = orderPizza('Pepperoni');
console.log(orderPepperoni('Medium')('Mushrooms'));
console.log(orderPepperoni('Small')('Olives'));
// 화살표 함수 사용 시 가독성이 더 좋아진다... 코드도 매우 간단
const orderPizza = (type) => (size) => (topping) =>
`Order: ${size} ${type} pizza with ${topping}`;
console.log(orderPizza('Pepperoni')('Large')('Extra cheese'));
재사용성 증가
특정 인자에 대해 부분적으로 적용된 함수를 생성하여 여러 곳에서 재사용할 수 있다.
코드 가독성
커링된 함수는 명확한 역할을 가지고 있으므로, 코드의 가독성이 좋아진다.
함수 조합
커링된 함수를 쉽게 조합하거나 구성할 수 있어 함수형 프로그래밍에서 유용하다.