codinghatso

커링(Curring) 함수 기초 본문

WEB/JavaScript

커링(Curring) 함수 기초

hatso 2022. 1. 13. 16:57

한 번에 인수를 하나만 받는 함수를 커링(Curring)이라고 하며, 또는 파샬 어플케이션(partial application) 이라고도 합니다.

커링은 복잡한 파라메터를 넘겨서 복잡한 처리를 하는 하나의 자바스크립트 함수를 단순하고 읽기 쉬운 여러 개의 나누어진 부분으로 만드는 기법입니다.

 

커링은 n개의 파라미터를 n차 뎁스(Depth)를 가진 함수로 분리를 하는 것이다.

장점은 중간 단계까지만 실행한 결과를 변수로 받아 다음 파라미터를 다양하게 확장할 수 있기 때문에 중간 단계에서 여러 개의 인자를 넘겨 다양한 결과를 만들 수 있습니다.

//unCurring
function orderSet(burger, beverage) {
  console.log("세트: " + burger + ", " + beverage);
}
orderSet("치즈버거", "콜라");

//Curring
//한번에 인수를 하나만 받는 함수를 커링이라고 하며, 파샬 어플리케이션 이라고도함.
function orderSet2(burger) {
  return function (beverage) {
    console.log("세트: " + burger + ", " + beverage);
  };
}
let order = orderSet2("치즈버거");
order("콜라");
order("커피");
order("스무디");

파라미터가 많을 때의 예

//파라메터가 많은 경우 ex
function orderSet3(burger) {
  return function orderBeverage(beverage) {
    return function orderSide(side) {
      return function orderKetchup(yn) {
        return function orderChicken(count) {
          console.log(
            "세트: " +
              burger +
              ", " +
              beverage +
              ", " +
              side +
              ", 캐첩(" +
              yn +
              "), 조각치킨(" +
              count +
              "개)"
          );
        };
      };
    };
  };
}
let order2 = orderSet3("불고기버거")("콜라");
order2("프렌치후라이")("Y")("2");

재활용성은 극단적으로 높아지지만, 함수들이 중첩되면서 복잡도만 더 가중하는 것 같다면 화살표 함수를 사용하면 됩니다.

//order3를 화살표 함수를 사용한 예
const orderSet4 = (burger) => (beverage) => (side) => (yn) => (count) => {
  console.log(
    "세트: " +
      burger +
      ", " +
      beverage +
      ", " +
      side +
      ", 캐첩(" +
      yn +
      "), 조각치킨(" +
      count +
      "개)"
  );
};
let order3 = orderSet4("갈릭버거")("콜라");
order3("프렌치후라이")("N")("2");

 

'WEB > JavaScript' 카테고리의 다른 글

나머지 파라미터 활용 ES6  (0) 2022.01.13
펼침 연산자 spread operator, 전개 구문  (0) 2022.01.13
함수 parameter  (0) 2022.01.13
반복문 for, while  (0) 2022.01.11
NaN와 Infinity  (0) 2022.01.10
Comments