본문으로 바로가기

[JS] 커링(Currying)

category WEB/JS 2019. 2. 19. 19:19

커링은 여러 개의 인자를 가진 함수를 호출할 경우, 파라미터의 수보다 적은 수의 파라미터를 인자로 받으면 누락된 파라미터를 인자로 받도록 하는 것이다. 즉 커링은 함수 하나가 n개의 인자를 받는 과정을 n개의 함수로 각각의 인자를 받도록 하는 것이다. 부분적으로 적용된 함수를 체인으로 계속 생성해 결과적으로 값을 처리하도록 하는 것이 그 본질이다.


말이 어렵다.


간단하게 말하면 함수를 부르는 함수를 만들어 인자를 각 함수가 각각 받는 것이다. 

func(1, 2, 3)이 아닌, func(1)(2)(3) 이런 방식으로 말이다.


이러한 함수를 생성할 때는 당연히 함수를 반환하는 클로저 패턴이 사용되는데,

때문에 let func1 = func(1)과 같이 생성해두고 func1(3)(4), func(5)(6)과 같이 변형하면 첫 번째 인자는 고정된 상태에서 다른 인자를 받을 수 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
function func(a){
    return function(b){
        return function(c){
            console.log(a, b, c);
        }
    }
}
 
func(1)(2)(3); // 1 2 3
 
let func1 = func(1);
func1(3)(4); // 1 3 4
func1(5)(6); // 1 5 6
cs


그래서 커링 함수에서는 인자의 순서가 중요하다.

앞쪽 인자일수록 변동가능성이 적고, 뒤로갈수록 변동가능성이 높아지기 때문이다.


[번역] 초보자를 위한 Currying 가이드