본문 바로가기

JavaScript

커링 기법

커링(Currying)

 

  • 커링 기법이란?
    여러 개의 인자를 받는 함수를 단일 인자를 받는 함수들의 연속으로 변환하는 것이다. 즉 n개의 인자를 받는 함수를 n개의 단일 인자를 받는 함수로 변환 하는것

예를들어 두 개의 인자를 받는 함수가 있다고 가정해보자

//두 개의 인자를 받는 함수
function add(a,b){
 return a+b;
};

//커링을 적용하면 다음과 같이 변환할 수 있다.
function curringAdd(a){
return function(b){
return a+b;
  };
};

이렇게 하면 curringAdd(2)를 호출하면 2를 고정한 새로운 함수를 반환하고 그 후에 newFunction(3)을 호출하면 최종적으로 5를 반환한다.

장점

  1. 재사용성
    특정 인자를 고정한 상태로 새로운 함수를 생성할 수 있어 코드의 재사용성이 높아짐
  2. 지연 평가
    필요한 인자를 나중에 제공할 수 있어 유연한 함수 호출이 가능함
  3. 가독성
    코드의 가독성을 높일 수 있다. 특히 복잡한 함수 조합에서 유용함

커링 예제

// 두 수를 더하는 커링 함수
function curriedAdd(a) {
    return function(b) {
        return a + b;
    };
};

//사용예시
const add5 = curringAdd(5) // 5를 고정한 새로운 함수 생성
console.log(add5(3))//8출력
console.log(add5(5))//10출력

//직접 여러 인자를 사용하는 것도 가능하다.
function curringAddMulti(a){
    return function(b){
        return function(c){
            return a+b+c;
          };
      };
 };
 
 const add5And3 = curringAddMulti(1)(2);
 console.log(add5And3(3)) //6 출력 
curriedAddMultiple(1)를 호출하면 1를 고정한 새로운 함수를 반환한다.
이 함수는 b를 인자로 받는다.
그 다음 (2)을 호출하여 b를 2으로 고정한 새로운 함수를 반환한다.
이 함수는 이제 c를 인자로 받는다.
최종적으로 add5And3(3)를 호출하면, c에 3를 전달하여 1 + 2 + 3를 계산하게 된다.
  • 전체 흐름
    단계 1: curriedAddMultiple(1) 호출 → a가 1로 고정된 함수 반환
    단계 2: 반환된 함수에 (2)을 호출 → b가 2으로 고정된 함수 반환결과: 최종 결과인 6이 출력
    단계 3: 반환된 함수에 add5And3(3) 호출 → c가 3로 설정되어 1 + 2+ 3계산