본문 바로가기

프로그래밍 언어/자바스크립트

자바스크립트(JavaScript) 콜백 함수와 콜백 지옥 해결 방법

자바스크립트(JavaScript) 콜백 함수와 콜백 지옥 해결 방법

자바스크립트에서 콜백 함수는 비동기 프로그래밍을 구현하는 핵심 요소입니다. 콜백을 사용하면 코드의 실행 순서를 제어할 수 있지만, 잘못된 사용은 "콜백 지옥"이라는 문제를 초래할 수 있습니다. 이 글에서는 콜백 함수의 기본 개념부터 콜백 지옥을 해결하는 방법까지 다루어 보겠습니다.

 

 

 

1. 콜백 함수란?

콜백 함수는 다른 함수에 인수로 전달되어 호출되는 함수입니다. 이는 비동기 작업이 완료된 후 실행될 코드를 정의하는 데 유용합니다. 자바스크립트의 비동기 특성으로 인해, 콜백 함수는 주로 비동기 작업의 결과를 처리하는 데 사용됩니다.

 

 

2. 콜백 함수의 사용 예

콜백 함수의 간단한 예는 다음과 같습니다. setTimeout 함수는 지정된 시간이 지난 후 콜백 함수를 호출합니다.

function sayHello() {
    console.log('Hello, world!');
}

setTimeout(sayHello, 1000);  // 1초 후 'Hello, world!' 출력

 

 

3. 콜백 지옥이란?

콜백 지옥은 중첩된 콜백 함수들로 인해 코드의 가독성과 유지보수성이 떨어지는 상황을 말합니다. 이는 비동기 작업을 순차적으로 처리할 때 흔히 발생합니다.

doSomething(function(result) {
    doSomethingElse(result, function(newResult) {
        doAnotherThing(newResult, function(finalResult) {
            console.log('Final result: ' + finalResult);
        });
    });
});

 

 

4. 콜백 지옥 해결 방법

콜백 지옥을 해결하기 위한 몇 가지 방법이 있습니다:

4.1. 함수 분리

콜백 함수를 별도의 명명된 함수로 분리하여 가독성을 높입니다.

function handleFinalResult(finalResult) {
    console.log('Final result: ' + finalResult);
}

function handleNewResult(newResult) {
    doAnotherThing(newResult, handleFinalResult);
}

function handleResult(result) {
    doSomethingElse(result, handleNewResult);
}

doSomething(handleResult);

4.2. 프라미스 사용

프라미스(Promise)는 비동기 작업의 결과를 처리하는 더 직관적인 방법을 제공합니다.

doSomething()
    .then(doSomethingElse)
    .then(doAnotherThing)
    .then(finalResult => {
        console.log('Final result: ' + finalResult);
    })
    .catch(error => {
        console.error(error);
    });

4.3. async/await 사용

async/await는 프라미스를 더 간단하게 사용하고, 동기 코드처럼 작성할 수 있게 해줍니다.

async function process() {
    try {
        const result = await doSomething();
        const newResult = await doSomethingElse(result);
        const finalResult = await doAnotherThing(newResult);
        console.log('Final result: ' + finalResult);
    } catch (error) {
        console.error(error);
    }
}

process();

 

 

 

 

5. 결론

자바스크립트에서 콜백 함수는 비동기 프로그래밍의 필수 요소입니다. 하지만 콜백 지옥을 피하기 위해 프라미스와 async/await 같은 최신 기능을 사용하는 것이 좋습니다. 이를 통해 코드의 가독성과 유지보수성을 크게 향상시킬 수 있습니다.