공부/프론트엔드

커링과 부분 적용 함수

truly-sparkle2 2023. 3. 12. 05:46

커링과 부분 적용 함수는 함수형 프로그래밍에서 사용하는 함수 조합 기법입니다. 이번 글에서는 이 두 가지 방법의 차이점과 사용 예시를 알아보겠습니다.

커링과 부분 적용 함수는 함수를 호출할 때 인자를 하나씩 적용해 나가는 방식으로 사용합니다. 이때, 커링과 부분 적용 함수는 모두 함수를 반환하는 고차 함수(higher-order function)입니다.

커링(Currying)

커링은 인자를 여러 개 받는 함수를 인자를 하나씩 받는 함수들의 중첩함수로 바꾸는 것입니다. 이를 통해 함수를 다양하게 조합하여 사용할 수 있습니다.

function multiply(a, b) {
  return a * b;
}

const double = multiply.bind(null, 2);
console.log(double(5)); // 10

// 커링을 사용한 예시
function curryMultiply(a) {
  return function(b) {
    return a * b;
  }
}

const triple = curryMultiply(3);
console.log(triple(5)); // 15

위 코드에서 multiply 함수를 bind 메소드를 이용해 2를 고정하면 double 함수는 첫 번째 인자를 2로 고정한 상태에서 두 번째 인자를 받아 계산합니다. 이를 커링으로 구현한 curryMultiply 함수는 인자를 하나씩 받는 중첩 함수로 구성되어 있습니다. 이를 이용해 3을 인자로 넘겨 triple 함수를 생성하고, triple(5)를 호출하면 15가 출력됩니다.

부분 적용 함수(Partial Application)

부분 적용 함수는 인자를 미리 받아 함수를 적용한 새로운 함수를 생성합니다. 이를 이용하면 함수를 다양하게 조합하여 사용할 수 있습니다.

function add(a, b, c) {
  return a + b + c;
}

const addFive = add.bind(null, 5);
console.log(addFive(3, 2)); // 10

// 부분 적용 함수를 사용한 예시
function partialAdd(a) {
  return function(b, c) {
    return add(a, b, c);
  }
}

const addTen = partialAdd(10);
console.log(addTen(3, 2)); // 15

위 코드에서 add 함수를 bind 메소드를 이용해 5를 고정하면 addFive 함수는 첫 번째 인자를 5로 고정한 상태에서 두 번째와 세 번째 인자를 받아 계산합니다. 이를 부분 적용 함수로 구현한 partialAdd 함수는 인자를 하나씩 받는 중첩 함수로 구성되어 있습니다.

반응형