[javascript] 콜백 헬과 선호하는 패턴

콜백 헬과 선호하는 패턴

JavaScript로 비동기 코드를 작성하다 보면 콜백 헬(callback hell)이라는 문제와 마주치는 경우가 있습니다. 콜백 헬은 비동기 코드에서 콜백 함수를 중첩하여 사용할 때 코드가 복잡해지고 가독성이 떨어지는 현상을 말합니다. 콜백 헬은 코드를 유지보수하기 어렵게 만들며 버그 발생 가능성을 높일 수 있습니다.

콜백 헬이란 무엇인가?

콜백 헬은 다음 예와 같이 비동기 작업이 중첩되어 발생합니다.

getData(function(data) {
    getMoreData(data, function(moreData) {
        getMoreDataAgain(moreData, function(evenMoreData) {
            // ... 코드 ...
        });
    });
});

위와 같이 콜백 함수가 중첩되어 있는 코드는 가독성이 나쁘며 여러 비동기 작업이 발생할 경우에는 더욱 복잡해질 수 있습니다.

콜백 헬을 피하는 방법

콜백 헬을 피하기 위해 Promise나 async/await 패턴을 사용할 수 있습니다.

Promise

getData()
    .then(function(data) {
        return getMoreData(data);
    })
    .then(function(moreData) {
        return getMoreDataAgain(moreData);
    })
    .then(function(evenMoreData) {
        // ... 코드 ...
    })
    .catch(function(error) {
        // 에러 처리
    });

Promise는 비동기 작업을 순차적으로 처리하고 에러를 쉽게 처리할 수 있도록 해줍니다.

async/await

async function fetchData() {
    try {
        const data = await getData();
        const moreData = await getMoreData(data);
        const evenMoreData = await getMoreDataAgain(moreData);
        // ... 코드 ...
    } catch (error) {
        // 에러 처리
    }
}

async/await는 Promise를 기반으로 하며, 코드를 더 읽기 쉽고 순차적으로 작성할 수 있게 해줍니다.

콜백 헬을 피하고자 하는 모든 개발자는 이러한 패턴을 잘 습득하여 사용하는 것이 좋습니다.