코딩 하는 가든

함수형 프로그래밍 - 일급함수 본문

함수형프로그래밍

함수형 프로그래밍 - 일급함수

가든리 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에 대해 심도 있게 들여다봐야겠다.