백엔드

JavaScript callback 함수

_민영 2023. 4. 4. 10:47

< callback 함수 >

> 콜백 함수란 파라미터로 함수를 전달받아 함수의 내부에서 실행하는 함수이다.

매개변수로 넘겨받은 함수는 일단 넘겨받고, 때가 되면 나중에 호출(callback)한다는 것이 콜백 함수의 개념이다.

 

 

function checkBrush(count, bad, good) {
    if (count < 3) {
        return bad();
    }
    else {
        return good();
    }
}

function badBrush() {
    console.log('양치 횟수가 부족합니다.');
}

function goodBrush() {
    console.log('잘하고 있습니다!');
}

checkBrush(2, badBrush, goodBrush); // 양치 횟수가 부족합니다.

 

 

  • checkBrush, badBrush, goodBrush 총 3가지 함수를 선언하고 checkBrush 함수를 호출할 때 매개변수로 count에 숫자값을, bad와 good에 각각 badBrush와 goodBrush 함수를 전달했다.
  • 여기서 badBrush와 goodBrush 함수가 콜백 함수인 것이다.
  • checkBrush 함수가 먼저 호출되고 매개변수로 들어온 count의 값에 따라 badBrush와 goodBrush 함수 둘 중 한 가지가 나중에 호출된다.

 

 

> 콜백 함수 사용 원칙

  • 익명 함수 사용
const number = [1, 2, 3];

number.forEach(function(x) {
    console.log(x * 2);
});

// 2
// 4
// 6
const number = [1, 2, 3];

number.forEach(x => {
    console.log(x * 2);
});

// 2
// 4
// 6

 

 

 

  • 함수의 이름 넘기기
function introduce(name, callback) {
    console.log('name: ', name);
    callback();
}

function finish() {
    console.log('자기소개 끝');
}

introduce('test', finish);

// name: test
// 자기소개 끝

 

 

자바스크립트는 null과 undefined 타입을 제외하고 모든 것을 객체로 다루기 때문에 함수를 변수처럼 사용할 수 있다.

따라서 함수를 콜백 함수로 사용할 경우, 함수의 이름만 넘겨주면 된다.

 

 

  • 전역변수, 지역변수를 콜백 함수의 파라미터로 전달 가능
const fruit = 'apple'; // 전역변수

function callbackFunc(callback) {
    const vegetable = 'potato'; // 지역변수
    callback(vegetable);
}

function eat(vegetable) {
    console.log(`fruit: ${fruit} / vegetable: ${vegetable}`);
}

callbackFunc(eat); // fruit: apple / vegetable: potato

 

 

 

> callback 지옥

  • callback을 사용하여 비동기적 작업 처리를 구현해야 할 때 callback이 3개 이상 필요하다면 엄청나게 중첩된 callback 함수가 만들어지게 되는데, 이러한 경우를 콜백 지옥이라고 부른다.
  • 그 이유는 가독성이 매우 떨어져 콜백 지옥 내부에서 어떠한 에러가 발생했을 때 찾아내기가 정말 어렵기 때문이다.

 

-> 이를 보완하기 위해서 promise가 나왔다.