Search

커링(Currying)

커링

커링은 함수형 프로그래밍에서 사용되는 기법으로, 여러 개의 인자를 가지는 함수를 하나의 인자를 가지는 함수들의 연속으로 변환하는 과정입니다. 이를 통해, 함수를 더욱 유연하게 사용할 수 있습니다.
예를 들어, 아래와 같은 두 개의 인자를 가지는 함수가 있다고 가정해봅시다.
function add(a, b) { return a + b; }
JavaScript
복사
이 함수를 커링하면, 다음과 같은 세 개의 인자를 가지는 함수들의 연속으로 변환됩니다.
function add(a) { return function(b) { return a + b; } } const add5 = add(5); const result = add5(3); // 8
JavaScript
복사
이렇게 커링된 함수를 사용하면, 인자를 여러 번 나누어 받을 수 있으며, 이를 통해 코드의 재사용성과 가독성을 높일 수 있습니다. 또한, 커링된 함수를 조합하여 새로운 함수를 만들 수도 있습니다.

장점

커링은 함수형 프로그래밍에서 다음과 같은 장점을 가지고 있습니다.

1. 함수의 재사용성

커링을 사용하면 함수의 재사용성을 높일 수 있습니다. 인자를 나누어 받는 함수를 작성함으로써, 인자의 일부만 전달하여 사용할 수 있습니다. 예를 들어, 다음과 같은 두 개의 인자를 가지는 함수가 있다고 가정해봅시다.
function multiply(a, b) { return a * b; }
JavaScript
복사
이 함수를 커링하면, 다음과 같은 세 개의 인자를 가지는 함수들의 연속으로 변환됩니다.
function multiply(a) { return function(b) { return a * b; } } const double = multiply(2); const result = double(3); // 6
JavaScript
복사
이렇게 커링된 함수는 두 번째 인자를 전달하지 않고, 첫 번째 인자만 전달하여 사용할 수 있습니다.

2. 코드 가독성

커링을 사용하면 코드의 가독성을 높일 수 있습니다. 인자를 나누어 받는 함수를 작성함으로써, 함수의 의도를 더욱 명확하게 표현할 수 있습니다. 예를 들어, 다음과 같은 두 개의 인자를 가지는 함수가 있다고 가정해봅시다.
function greet(name, greeting) { return greeting + ', ' + name + '!'; }
JavaScript
복사
이 함수를 커링하면, 다음과 같은 세 개의 인자를 가지는 함수들의 연속으로 변환됩니다.
function greet(name) { return function(greeting) { return greeting + ', ' + name + '!'; } } const greetJohn = greet('John'); const result = greetJohn('Hello'); // Hello, John!
JavaScript
복사
이렇게 커링된 함수는, 각 인자를 하나씩 전달하여 사용할 수 있으며, 함수의 의도가 더욱 명확하게 표현됩니다.

3. 함수 합성

커링된 함수는 함수 합성(composition)에 매우 유용합니다. 함수 합성이란, 두 개 이상의 함수를 조합하여 새로운 함수를 만드는 과정을 말합니다. 예를 들어, 다음과 같은 두 개의 함수가 있다고 가정해봅시다.
function add(a, b) { return a + b; } function multiply(a, b) { return a * b; }
JavaScript
복사
이 두 함수를 합성하여, 다음과 같은 세 개의 인자를 가지는 함수를 만들 수 있습니다.
function addAndMultiply(a, b, c) { return multiply(add(a, b), c); } const result = addAndMultiply(2, 3, 4); // 20
JavaScript
복사
이 함수는 먼저 add(a, b)를 호출하여 a + b 값을 계산하고, 이 값을 multiply 함수의 첫 번째 인자로 전달합니다. 이후 c 값을 두 번째 인자로 전달하여 a + bc의 곱을 계산합니다.
커링된 함수는 이러한 함수 합성을 더욱 쉽게 구현할 수 있도록 도와줍니다.

단점

커링은 함수형 프로그래밍에서 매우 유용한 기법이지만, 사용하지 않는 경우에 비해 코드의 복잡성을 증가시킬 수 있습니다. 또한, 커링된 함수를 디버깅할 때에는 인자가 하나씩 전달되는 과정을 추적해야 하기 때문에, 일반적인 함수보다 디버깅이 어려울 수 있습니다.

결론

커링은 함수형 프로그래밍에서 매우 유용한 기법입니다. 함수의 재사용성과 가독성을 높일 수 있으며, 함수 합성을 통해 모듈화된 코드를 작성할 수 있습니다. 하지만, 사용하지 않는 경우에 비해 코드의 복잡성을 증가시킬 수 있으며, 디버깅이 어려울 수 있습니다. 따라서, 커링은 필요한 상황에서 적절히 사용하는 것이 중요합니다. 함수형 프로그래밍에서 매우 중요한 개념이므로, 개발자는 커링을 잘 이해하고 활용할 수 있어야 합니다.