지금까지 함수를 호출했을 때 또 다른 함수를 파라미터로 전달하는 방법에 대해 포스팅한다.
그러면 함수 안에서 값을 반환할 때 새로운 함수를 만들어 반환하는 방법도 살펴보자.
▲ 함수에서 반환하는 값이 함수 객체인 경우
어떤 함수를 실행했을 때 또 다른 함수를 반환받으면 반환받은 함수를 그대로 실행할 수 있다.
이렇게 만들면 하나의 함수를 실행했을 때 추가적인 결과를 얻거나 또는 추가 작업을 할 수 있다. 그러면 더하기 함수를 실행했을 때 그 기록을 남겨 두었다가 출력하는 기능을 가상으로 만들어보자.
ch03_test16.js 파일을 만든 후 다음과 같이 입력한다.
function add(a, b, callback) {
var result = a + b;
callback(result);
var history = function(){
return a + '+' + b + '=' + result;
};
return history;
}
var add_history = add(10, 10, function(result){
console.log('파라미터로 저낟ㄹ된 콜백 함수 호출됨.');
console.log('더하기 (10,10)의 결과 : %d', result);
});
console.log('결과 값으로 받은 함수 실행 결과 : ' + add_history());
▲ 반환받은 함수 실행하기
반환받은 history 객체가 함수이고 이 함수를 실행했을 때 어떤 값으로 더하기 연산을 했는지 알 수 있도록 만들었따.
이렇게 함수의 실행 결과로 함수 객체를 받을 수 있다는 것을 잘 이해했다면 반환된 함수에서 접근할 수 있는 변수에 대해서도 알아볼 필요가 있다.
반환된 함수는 보통 처음 실행한 함수 안에서 만들어 지는데, 그 안에 있는 변수들은 함수가 반환된 후에도 계속 접근할 수 있다.
▲ 반환된 함수 객체에서 함수를 만들어 준 add 함수 안의 변수에 접근하기
add 함수 안에 history 함수를 몇 번이나 실행했는지 알 수 있도록 count 변수를 만들었따면 이 변수는 add 함수에서 반환된 함수 안에서 계속 접근할 수 있다.
ch03_test17.js 파일을 만들고 코드를 입력한다.
▲ 반환된 함수 객체에서 더하기 함수의 변수를 계속 접근한 결과
반환된 함수를 반복해서 실행하면 count 변수의 값이 증가하는 것을 볼 수 있다.
이 내용을 주의해서 보자. 반환된 history 함수가 실행될 때는 이미 add 함수가 메모리에서 접근할 수 없는 상태가 된 다음이다.
따라서 history 함수가 실행될 때는 add 함수 안에 만들어진 count 변수도 같이 접근할 수 없어야 한다.
하지만 이와 같이 함수 안에서 새로운 함수를 만들어 반환하는 경우에는 예외적으로 변수 접근을 허용한다.
이것을 클로저(Closure)라고 부른다.
'Study > Node.js' 카테고리의 다른 글
[노드JS] 주소 문자열과 요청 파라미터 다루기 (0) | 2019.03.16 |
---|---|
[노드JS] 프로토타입 객체 만들기 (0) | 2019.03.16 |
[노드JS] 함수를 호출했을 때 또 다른 함수를 파라미터로 전달하기 (0) | 2019.03.16 |
[노드JS] 콜백 함수 이해하기 (0) | 2019.03.16 |
[노드JS] slice() 메소드 활용하기 (0) | 2019.03.16 |