티스토리 뷰

나는 콜백함수의 정의를 포괄적인 의미에서 보면 아래와 같다고 생각한다.

"함수의 정의는 내가 했지만, 호출은 내가 하지 않는 함수, 누군가로 부터 호출당하는 함수가 콜백 함수다."

뭐 찾아보면, 옵저버패턴으로 부터 나와 상태변화(이벤트) 발생 시 상태를 알리는 뭐 이런 정의도 있지만, 나는 위와 같은 정의가 이해하기가 더 쉽더라.


콜백함수의 이해를 돕기위해 예를 들어보자.

//배열을 만들어 보자
var arr = [3,1,2];
console.log(arr.sort());
// display
// [1,2,3]

간단히 sort()라는 함수를 통해 정렬을 했다. 그런데 역순(오름차순)으로 정렬을 하고 싶은데 어떤 식으로 해야 하는가?

w3schools에 가서 찾아보니


여기 보니 campareFunction 이라는 함수를 정의하여 함수의 정렬을 바꿀 수 있다 한다.

 그럼 함수의 정렬 방법을 위해 함수를 작성하자.

function inc(a,b){
return b - a;
}
console.log(arr.sort(inc));
// display
// [3,2,1]

우리가 원한 오름 차순 결과가 나왔다. 

우리는 여기서 inc 라는 함수를 정의는 하였지만, 실제로 inc 라는 함수를 호출한 놈은 sort() 이다. (인자값으로 inc을 넣어준거지 호출한 것은 아니다)

sort() 내부에서 필요에 의해 inc 함수를 호출하였을 것이다.

아마도 sort() 함수는 

function sort(callback){
callback();
...
}

와 같이 callback 함수를 받아 사용 했을 것이다.

근데 여기서 우리가 만든 inc 함수는 sort() 함수의 스펙에 의해 만들어진 함수로, 다른 곳에 쓰여질 일이 없어보이는 일회성 함수로 보인다.

그럼 여기서 어떤식으로 변경을 하면 효율적 일까?

console.log(arr.sort(function (a, b) {
return b - a;
}));
// display
// [3,2,1]

익명함수를 선언하여, sort에서만 쓰이는 콜백함수를 만들었다.

여기서 익명함수는 함수의 이름없이 정의한 함수이다.

아래 역시 동일한 기능을 하는 익명함수 를 다른 방식으로 쓴 것이다.

console.log(arr.sort((a, b) => {
return b - a;
}));



요약하자면, 첫줄에 적어둔 

"함수의 정의는 내가 했지만, 호출은 내가 하지 않는 함수, 누군가로 부터 호출당하는 함수가 콜백 함수다."

라는 것이다.


이 사실을 기반으로, 다음 포스팅에서  node.js 에서의 동기적 프로그래밍과, 비동기적 프로그래밍에 대해 설명 하겠다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함