커링(Currying)이란?
커링(Currying)은 여러 개의 인수를 받는 함수를, 각각 하나의 인수만 받는 일련의 함수들로 변환하는 기법입니다. 쉽게 말해, 원래 한 번에 모든 인수를 받아야 하는 함수가 첫 번째 인수를 받고 새로운 함수를 반환하고, 그 함수가 두 번째 인수를 받아 또 다른 함수를 반환하는 식으로 동작하며, 마지막 인수가 전달될 때까지 이 과정이 반복되는 것입니다.
커링 함수의 활용
커링은 다음과 같은 상황에서 특히 유용합니다.
- 같은 변수를 반복해서 전달해야 하는 번거로움을 줄여줍니다.
- 이벤트 핸들링(event handling)에서 매우 효과적으로 사용할 수 있습니다.
기본 문법
function Myfunction(a) {
return (b) => {
return (c) => {
return a * b * c;
}
}
}예제 1: 커링을 사용하지 않은 경우
아래 예제에서는 커링을 적용하지 않았기 때문에, 부피를 계산하기 위해 모든 매개변수를 한꺼번에 volume(11, 2, 3) 형태로 전달합니다.
<html>
<body>
<script>
function volume(length, width, height) {
return length * width * height;
}
document.write(volume(11, 2, 3));
</script>
</body>
</html>실행 결과
66
예제 2: 커링을 사용한 경우
아래 예제에서는 커링을 적용했기 때문에, 매개변수가 volume(11)(2)(3)처럼 하나씩 순차적으로 전달됩니다. 마지막 함수가 호출되어 최종 인수를 받으면 계산 결과가 반환됩니다.
<html>
<body>
<script>
function volume(length) {
return function(width) {
return function(height) {
return height * width * length;
}
}
}
document.write(volume(11)(2)(3));
</script>
</body>
</html>실행 결과
66
두 예제 모두 결과값은 66로 동일하지만, 커링을 사용하면 인수를 단계별로 나누어 전달할 수 있어 코드의 재사용성과 유연성이 크게 향상된다는 점이 핵심 차이입니다.