커링이란 무엇일까?
쉽게 말해서 함수 안의 모든 인자가 들어올때까지 기다리는 기법이다.
function _curry(fn) {
return function(a) {
return function(b) {
return fn(a, b);
}
}
}
var add = _curry(function(a, b) {
return a + b;
}
);
var add10 = add(10);
console.log(add10(5);
여기서 curry함수를 선언하는데 이 함수는 함수를 받는다.
받은 함수는 맨 마지막에 실행된다. 아껴두었다가 인자를 모두 받고 실행한다.
굉장히 인정없는 놈?이다.
일단 var add = _curry(function(a, b) {
return a + b;
}
);
여기서 add함수는 결국 var add=function(a) {
return function(b) {
return fn(a, b);
}
} ;
가 된다.
함수도 값이니까 변수에 값으로 담는것이다.
add(10)을 해서 콘솔로 띄우면
function(a) {
return function(b) {
return fn(a, b);
}
}
이게 나온다. 함수가 담긴것이다.
그리고 중요한 것은 마지막 a에 10이 들어가고 기다린다는 것이다.
마지막 fn(a,b)가 fn(10,b)가 될것이고 fn을 풀면 또다시 이렇게 될것이다.
function(10, b) {
return 10 + b;
}
그럼 이제 b만 더 받으면 된다.
여기까지 add(10); 이었으니 add(10)(5)를 해주던 add(10)을 변수에 넣고 add10(5)를 해주던 같은 결과가 나온다.
커링을 이해하려면 시간이 걸린다.
최소 5번은 코드를 생각하면서 고뇌하면서 짜야된다.
10번은 쳐야지 조금 이해가 가고 20번을 쳐봐야 아...이런거였군 한다.
다음은 reduce를 배워보자.
'Developer' 카테고리의 다른 글
Controller와 RestController 차이 (0) | 2020.09.09 |
---|---|
자바스크립트 TDZ (Temporal Dead Zone) 임시사망지역 (0) | 2020.09.04 |
Spring JDBC란? (0) | 2020.08.03 |
DataSource (0) | 2020.08.03 |
프로젝트 아키텍쳐 (0) | 2020.08.03 |