커링은 여러 개의 인자를 가진 함수를 호출할 경우, 파라미터의 수보다 적은 수의 파라미터를 인자로 받으면 누락된 파라미터를 인자로 받도록 하는 것이다. 즉 커링은 함수 하나가 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 |
그래서 커링 함수에서는 인자의 순서가 중요하다.
앞쪽 인자일수록 변동가능성이 적고, 뒤로갈수록 변동가능성이 높아지기 때문이다.
'WEB > JS' 카테고리의 다른 글
[JS] 이터러블 프로토콜을 따르는 map, filter, reduce 함수 만들기 (0) | 2019.04.29 |
---|---|
[JS] 콜스택과 이벤트루프 (0) | 2019.02.22 |
리액트 - 서버사이드 렌더링(SSR) (0) | 2019.01.16 |
리액트 - 고차 컴포넌트(HOC) (0) | 2019.01.15 |
[JS] 제너레이터 (0) | 2019.01.13 |