티스토리 뷰

Node.js

[node.js]콜백 함수 이해하기

감자형 2017. 9. 17. 13:24

  • 콜백함수(CallBack function)
파라미터로 전달되는 함수

function add(a,b,callback){
var result = a + b;
callback(result);
}

  • 함수를 호출했을 때 또 다른 함수를 파라미터로 전달하는 방법
함수를 파라미터로 전달하는 경우 대부분은 비동기 프로그래밍, 연산이 끝났을 때 파라미터로 전달한 함수가 실행 될 수 있다면 그 시점에 겨로가를 처리할 수 있으므로, 효율
  • 함수 안에서 값을 반환 할 때 새로운 함수를 만들어 반환하는 방법
Ex)

function add(a,b,callback){
    var result = a + b;
var cnt = 0;
    callback(result);

    var history = function(){
cnt ++;
        return a + '+' + b + ' = ' + result;
    }
    return history;
};
<설명> 1. add(10,10,function(result))로 add 함수를 호출한다. 그리고 add 함수에서는 result에 a+b의 값을 대입한다. callback(result); 를 호출하여 console.log의 값을 출력 시킨다. 

2.  add(10,10,function(result))를 호출한 쪽의 반환값으로 history의 함수 객체를 반환 시킨 값이 add_history 의 변수에 들어가게된다.

3. 최종적으로 호출한 add()함수쪽의 내부함수가 
callback(result)에 의해 먼저 호출이 먼저 되어 console.log()결과가 먼저 나오게 되고, history의 함수 객체를 출력 시키면return a + '+' + b + ' = ' + result; 의 값이 출력 되게 된다.

var add_history = add(10,10,function(result){

    console.log('파라미터로 전달된 콜백함수 호출됨');
    console.log('더하기 (10,10)의 결과 : %d',result);
});

console.log('결과 값으로 받은 함수 실행 결과' + add_history());

console.log('결과 값으로 받은 함수 실행 결과' + add_history());

console.log('결과 값으로 받은 함수 실행 결과' + add_history());

  • 클로저(closure)란?
위의 예제에서, 반환된 함수를 반복해서 실행하면 conut 변수의 값이 증가하는것을 볼 수 있는데 반환된 history 함수가 실행 될때는 이미 add함수가 메모리에서 접근 할 수 없는 상태가 된 다음이다. 따라서, history 함수가 실행 될 때에는 add함수 안에 만들어진 count 변수도 같이 접근 할 수 없어야 하는데
하지만, 이와같이 함수 안에서 새로운 함수를 만들어 반환하는 경우에는 예외적으로 접근을 허용한다.


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함