[JavaScript ES6] Currying

Sooooooah·2023년 4월 25일

javaScript ES6

목록 보기
7/8

커링이란?

여러 개의 인자를 가지는 함수를 단일 인자로 갖는 함수들의 계층구조로(순서로) 바꾸는 것 —> 클로저(Closure)에 대한 개념이해가 필수

함수가 필요로 하는 인자의 갯수만큼 충족되지 않았다면 계속 함수를 반환

→ 인자의 갯수를 모두 충족시켰다면 최종적인 값을 반환

function sum(x) {
  return function (y) {
    return x + y;
  };
}
const add = sum(3);
console.log(add(4)); // 7
console.log(sum(5)(8)); // 13

Arrow Function

const sum = (x) => {
  return (y) => {
    return (z) => {
      return x + y + z;
    };
  };
};

console.log(sum(8)(2)(3)); // 13

// =>>
const sumArrowFunc = (x) => (y) => (z) => x + y + z;
console.log(sumArrowFunc(3)(5)(3)); // 11

문자열

feed() 함수는 인자를 2개 받는데 첫번째 인자로는 동물의 이름을 받고, 두번째 인자로는 먹이 종류를 받는다.

출력 —> 바둑에게 생선 먹이를 주고 있다.

const feed = (name) => {
  return (feed) => {
    return `${name}에게 ${feed}을(를) 주고 있다.`;
  };
};

console.log(feed("진돌이")("생선"));

const feed2 = feed("북북이");
console.log(feed2("닭고기"));
console.log(feed2("소고기"));
console.log(feed2("돼지고기"));

// ------------------------------ //

const feedArrow = (name) => (feed) => {
  return `${name}에게 ${feed}를 주고있다`;
};
const feedArrow2 = feedArrow("나옹이");
console.log(feedArrow2("고등어"));
console.log(feedArrow2("참치"));

/*
  진돌이에게 생선을(를) 주고 있다.
  북북이에게 닭고기을(를) 주고 있다.
  북북이에게 소고기을(를) 주고 있다.
  북북이에게 돼지고기을(를) 주고 있다.
  나옹이에게 고등어를 주고있다
  나옹이에게 참치를 주고있다
*/

—> 중복을 줄일 수 있다

파라미터 순서 바꾸기

const feed = (a) => (b) => (c) => (d) => {
  return a + b + d + c;
};
const feed2 = feed("바둑")("에게 ")("를 줬다");
console.log(feed2("고등어"));
console.log(feed2("연어"));
// 바둑에게 고등어를 줬다
// 바둑에게 연어를 줬다

커링 함수의 가장 큰 장점 중 하나

—> 인자를 부분 적용한 함수를 쉽게 만들어 낼 수 있다

—> 인자의 수를 마음대로 조절, 매개변수를 나타내는 함수의 집합을 쉽게 만든다.

profile
즐거운 서비스를 추구합니다.

0개의 댓글