자바스크립트에서 함수는 일급 객체이다.
일급 객체는 함수의 매개변수를 통해 함수를 전달할 수 있다.
callback함수는 이러한 일급 객체의 특성을 이용한 함수 이다.
콜백(callback)함수란 함수의 매개변수를 통해 다른 함수의 내부로 전달되는 함수를 의미한다.
function repeat(n) {
for(let i = 0; i < n; i++) console.log(i)
}
repeat(5) // 0, 1, 2, 3, 4
repeat
함수는 매개변수를 통해 전달받은 숫자만큼 반복하여 i를 호출한다.
이때 repeat
함수는 console.log(i)
에 강하게 의존하고 있어 다른 일을 할 수 없다.
만약 함수 반복문 내부에서 다른 일을 하고 싶다면 함수를 새롭게 정의해야 한다.
이때 콜백 함수를 사용한다.
function repeat(n) {
for(let i = 0; i < n; i++) {
f(i) // i를 전달하면서 함수 f를 호출
}
}
let logAll = funtion(i) {
console.log(i)
}
repeat(5, logAll) // 0, 1, 2, 3, 4
let logOdd = function(i) {
if(i % 2) console.log(i)
}
repeat(5, logOdd) // 1, 3
위 repeat
함수는 경우에 따라 변경되는 일을 함수 f
로 추상화했고 이를 외부에서 전달받는다.
이는 함수에 일급 객체의 특성을 이용하여 매개변수로 전달한 것이다.
이로 인해 내부 로직에 강력히 의존하지 않고 외부에서 로직의 일부분을 함수로 전달받아 수행하므로 더욱 유연한 구조를 갖게 되었다.
출처 : 모던 자바스크립트 Deep Dive
좋은 글이네요