본문으로 바로가기

[Javascript] 커링(Currying) 함수란?

category 1. 웹개발/1_1_1 JavaScript 2022. 1. 3. 12:52

 

 

커링(Currying)은 함수의 재사용성을 높이기 위해 함수 자체를 return하는 함수입니다. 함수를 하나만 사용할 때는 필요한 모든 파라미터를 한 번에 넣어야 합니다. 커링을 사용하면 함수를 분리할 수 있으므로 파라미터도 나눠 전달할 수 있습니다.

* 커링과 같이 함수 자체를 인자로 받거나 반환하는 함수를 '고차 함수' 라고 부르기도 합니다.

 

 

[일반적인 함수]

function add(num1, num2) {
    console.log(num1 + num2);
}

add(5, 8); // 13

 

 

[커링(Currying) 함수]

커링을 사용하면 num1 하나를 파라미터로 받고, 그 다음으로 num2를 파라미터로 받아서 함수를 재사용할 수 있습니다.

function add(num1, num2) {
    return num1 + num2;
}

// add() 함수를 return 하는 또 다른 함수를 return
function addPlus(num1) {
    return function(num2) {
        console.log(add(num1, num2));
    }
}

// 화살표 함수로 표현 (위와 동일)
addPlus = num1 => num2 => console.log(add(num1, num2));

// 출력 (파라미터를 하나씩)
addPlus(5)(4); // 9

 

 

왜 위와 같은 커링을 사용할까요? 기존 함수와 비교하면서 살펴보도록 하겠습니다.

보통 휴대폰 번호를 입력할 때 휴대폰 앞의 010은 거의 같아서 출력할 때 아래와 같이 출력될 것입니다.

// first = 010, tel = 010이후의 8자리
function phoneNum(first, tel) {
	console.log(first + tel);
}

phoneNum(01001230505); // 01001230505
phoneNum(01005253433); // 01005253433

 

 

커링을 활용해 위의 함수를 재사용해보면 어떻게 될까요?

function phoneNum(first, tel) {
	console.log(first + tel);
}

const phoneNumber = first => number => phoneNum(first, number);
const phoneNumber010 = phoneNumber('010');

phoneNumber010(01230505); // 01001230505
phoneNumber010(05253433); // 01005253433

 

phoneNumber010 함수는 첫 번째 인자로 010을 세팅하고 나머지 8자리만 전달 받아서 010과 함께 출력해주는 함수입니다. 이렇게 하면 함수를 재사용해서 사용하므로 파라미터를 나누어 전달해서 코드를 효율적으로 작성할 수 있습니다.