자바스크립트 콜백 함수(Callback Function)

자바스크립트에서 콜백 함수는 비동기적인 동작에서 많이 사용되는 개념입니다. 콜백 함수는 다른 함수의 인자로 넘겨져서 함수의 실행이 완료된 후 호출되는 함수입니다. 이를 통해 함수의 비동기 동작이 완료되었을 때 원하는 작업을 수행할 수 있게 됩니다.

콜백 함수의 작동 방식

콜백 함수는 다른 함수 내에서 호출되므로, 함수 호출의 제어권을 다른 함수에게 넘겨주는 것으로 비동기적인 동작을 구현할 수 있습니다. 예를 들어, setTimeout 함수는 일정 시간이 지난 후에 콜백 함수를 호출하도록 설계되어 있습니다.

아래는 setTimeout 함수를 사용하여 3초 후에 “Hello, World!”를 출력하는 예제입니다.

setTimeout(function() {
    console.log("Hello, World!");
}, 3000);

위 코드에서 setTimeout 함수는 두 개의 인자를 받습니다. 첫 번째 인자로 전달된 익명 함수가 콜백 함수로, 두 번째 인자로 전달된 3000은 함수 호출을 지연시킬 시간(밀리초 단위)입니다.

콜백 함수의 유용성

콜백 함수는 비동기적인 동작을 처리하는 가장 일반적인 방법 중 하나입니다. 많은 웹 애플리케이션에서 비동기적인 작업으로 AJAX 요청, 파일 I/O, 타이머 등을 다루는데 사용됩니다.

예를 들어, AJAX 요청에 대한 응답을 받은 후에 화면에 표시하거나 다른 작업을 수행하려면 콜백 함수를 사용해야 합니다. 이 때 콜백 함수를 전달하여 비동기적인 작업이 완료된 후에 실행되도록 할 수 있습니다.

function fetchData(url, callback) {
    // AJAX 요청
    fetch(url)
        .then(response => response.json())
        .then(data => callback(data))
        .catch(error => console.log(error));
}

function displayData(data) {
    // 데이터 출력
    console.log(data);
}

const apiUrl = "https://api.example.com/data";
fetchData(apiUrl, displayData);

위의 예제에서 fetchData 함수는 fetch 메소드를 사용하여 AJAX 요청을 보냅니다. 요청이 성공하면 응답 데이터를 처리하기 위해 콜백 함수 displayData가 호출됩니다.

콜백 지옥 (Callback Hell)

콜백 함수를 사용하는 방식은 비동기적인 동작을 처리하기 좋지만, 중첩된 콜백 함수로 인해 코드의 가독성이 떨어져 콜백 지옥이라고 불리는 상황이 발생할 수 있습니다.

이러한 문제를 해결하기 위해 프로미스(Promise)나 async/await를 사용하는 것이 좋습니다. 프로미스는 콜백 함수를 사용한 코드를 보다 구조화된 형태로 작성할 수 있게 해주고, async/await는 비동기 코드를 동기식 코드처럼 작성할 수 있도록 해줍니다.

결론

자바스크립트 콜백 함수는 비동기적인 동작을 처리하기 위해 사용되는 중요한 개념입니다. 콜백 함수를 사용하면 비동기 작업의 완료 시점을 알 수 있고, 원하는 작업을 처리할 수 있습니다. 하지만 콜백 함수의 중첩으로 인해 코드의 가독성이 떨어질 수 있는데, 프로미스나 async/await를 사용하여 이러한 문제를 해결할 수 있습니다.