함수형프로그래밍
함수형 프로그래밍 - 일급함수
가든리
2020. 3. 14. 00:34
일급함수
일급함수란?
JavaScript 에서 다음과 같이 변수에 함수를 담을 수 있는 개념을 말한다.
var f1 = function(a) { return a * a; };
물론 함수를 변수에 담을 수 있으니 이 함수를 인자로 넘기는 것도 가능하다.
var f2(f) {
return f();
}
f2(function() {return 20;});
예시
function add_maker(a) {
return function(b) {
return a + b;
}
}
위의 add_maker 함수는 다음과 같은 방법으로 사용 가능하다.
var add10 = add_maker(10);
var add15 = add_maker(15);
var add20 = add_maker(20);
먼저 add10이라는 변수를 만들어 add_maker(10) 을 담아준다. 이 때 add10 에는 function(b) { return 10 + b; } 라는 함수가 담기게 된다. 같은 원리로 add 15, add 20 에는 각각 15+b, 20+b를 리턴하는 함수가 담겨있게 된다.
- add10 - > function(b) { return 10 + b; }
- add15 - > function(b) { return 15 + b; }
- add20 - > function(b) { return 20 + b; }
add10(20); // 결과 : 30
add10(25); // 결과 : 35
add15(30); // 결과 : 45
add20(30); // 결과 : 50
add10 은 들어온 인자에 10을 더하는 함수가 되었으며 add15, add20도 각각 함수가 되었다.
처음 add_maker 안에 들어 있던 함수인 function(b) { return a + b;} 는 들어온 인자에 의해 형태가 결정되며, 한번 형태가 결정이 된 함수는 앞으로 같은 인자에 대한 같은 값을 반환하는데, 이를 closure (폐쇄) 상태라고 한다.
즉 add10에 담긴 함수인 function(b) {return a + b;} 는 a라는 변수에 10이라는 값이 바인딩되어 add10에 담긴 함수에 한해 항상 a = 10을 만족한다는 것이다.
사실 위 개념은 context와 lexical scoping을 곁들여 설명해야 맞는 것 같지만 처음 배우는 초보자의 눈으로 적어놓았다. 기회가 된다면 closure에 대해 심도 있게 들여다봐야겠다.