[JavaScript] 커링(currying)

HyeJean·2024년 8월 19일

JavaScript

목록 보기
13/13

💡 커링(Currying)

커링(Currying)은 여러 개의 인자를 받는 함수를 단일 인자를 받는 함수들의 체인으로 변환하는 기술이다.

여러 개의 인자를 받는 하나의 함수 -> 각각의 인자를 받는 여러 개의 함수로 쪼개어 호출

고차 함수(Higher-Order Function)

  • 함수를 인자로 받는 함수
  • 함수를 반환하는 함수

커링은 여러 개의 인자를 받는 함수를 인자를 하나씩 받는 함수들로 변환하는 과정입니다. 이 과정에서 각 단계마다 새로운 함수를 반환하기 때문에, 커링 함수는 고차 함수이다.

커링의 인자 순서

커링을 사용할 때 인자의 순서를 잘 고려하는 것이 매우 중요하다.

  • 앞에 위치한 인자는 변동 가능성이 적은 값으로 설정하는 것이 좋다.
    => 한 번 설정한 값을 여러 곳에서 재사용할 수 있다.

  • 뒤에 위치한 인자는 변동 가능성이 높은 값으로 설정하는 것이 좋다.
    => 동일한 설정을 유지하면서도 다양한 값을 쉽게 전달할 수 있다.


🤔 예시

[피자 주문하기]

피자 주문하는 단계
피자 종류 선택 -> 피자 크기 선택 -> 피자 토핑 추가

* 커링 사용 안한 경우

// 피자 종류, 크기, 토핑을 모두 한 번에 지정해야 하므로, 매번 모든 인자를 전달해야 한다.
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'));

* 화살표 함수(ES6)로 커링 사용

// 화살표 함수 사용 시 가독성이 더 좋아진다... 코드도 매우 간단
const orderPizza = (type) => (size) => (topping) => 
    `Order: ${size} ${type} pizza with ${topping}`;

console.log(orderPizza('Pepperoni')('Large')('Extra cheese'));


🔍 커링의 장점

  1. 재사용성 증가
    특정 인자에 대해 부분적으로 적용된 함수를 생성하여 여러 곳에서 재사용할 수 있다.

  2. 코드 가독성
    커링된 함수는 명확한 역할을 가지고 있으므로, 코드의 가독성이 좋아진다.

  3. 함수 조합
    커링된 함수를 쉽게 조합하거나 구성할 수 있어 함수형 프로그래밍에서 유용하다.

0개의 댓글