본문 바로가기
개발

비동기 처리의 기초: 자바스크립트의 콜백과 프로미스 이해하기

by new-fp 2024. 11. 17.
728x90

자바스크립트로 비동기 처리하기: 콜백과 프로미스의 이해

안녕하세요, 개발자 여러분! 오늘은 자바스크립트의 중요한 주제 중 하나인 비동기 처리에 대해 이야기해보려고 합니다. 특히, 콜백 함수와 프로미스를 중심으로 살펴보며, 이들이 어떻게 우리의 코드를 더 깔끔하고 관리하기 쉽게 만들어주는지 알아보겠습니다.

들어가며

자바스크립트에서는 비동기 처리가 매우 중요합니다. 웹 애플리케이션은 사용자와 상호작용하는 동안 다른 작업도 수행해야 하기 때문에, 비동기 메커니즘을 이해하는 것은 개발자에게 필수적입니다. 특히, 콜백과 프로미스는 비동기 처리를 지배하는 두 가지 주요 개념입니다.

콜백 함수란?

콜백 함수는 다른 함수의 인자로 전달되는 함수로, 특정 이벤트나 작업이 완료된 후에 호출됩니다. 예를 들어, 사용자가 버튼을 클릭했을 때 함수를 호출하거나 시간이 지나면 자동으로 실행되는 함수입니다. 아래는 간단한 예제입니다.

function fetchData(callback) {
    setTimeout(() => {
        const data = "데이터를 성공적으로 불러왔습니다!";
        callback(data);
    }, 2000);
}

fetchData((result) => {
    console.log(result);
});

위 코드에서는 fetchData 함수가 2초 뒤에 데이터를 불러오고, 그 결과를 콜백 함수에 전달합니다. 실행 결과는 다음과 같습니다.

데이터를 성공적으로 불러왔습니다!

이러한 방식의 문제는 콜백 지옥이라고 불리는 현상인데, 여러 개의 비동기 작업이 중첩되면 코드가 복잡하게 얽혀서 가독성이 떨어지기 때문입니다. 이를 해결하기 위해 등장한 것이 바로 프로미스입니다.

Promises

프로미스는 비동기 작업의 결국 완료 결과를 다루기 위한 더 나은 방법입니다. Promise는 세 가지 상태를 가질 수 있습니다: 대기(pending), 이행(fulfilled), 거부(rejected). 즉, 작업이 아직 진행 중일 때, 성공했을 때, 실패했을 때 각각의 상태로 나뉘어 처리할 수 있습니다.

아래는 프로미스를 사용하는 예제입니다.

function fetchData() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            const success = true; // 성공 여부를 나타내는 변수
            if (success) {
                resolve("데이터를 성공적으로 불러왔습니다!");
            } else {
                reject("데이터를 불러오는 데 실패했습니다.");
            }
        }, 2000);
    });
}

fetchData()
    .then(result => console.log(result))
    .catch(error => console.error(error));

프로미스를 사용하면 코드가 더 깔끔해지고, .then()을 통해 결과를 처리하고 .catch()를 이용해 에러를 처리할 수 있습니다. 이러한 구조 덕분에 가독성이 좋아지며, 여러 비동기 작업이 중첩되어도 관리가 수월해집니다.

비교: 콜백 vs 프로미스

  • 콜백:
    • 장점: 간단하고 직관적임
    • 단점: 중첩 시 가독성이 낮아짐, 에러 처리 복잡함
  • 프로미스:
    • 장점: 체인화가 가능하여 가독성 높음, 에러 처리 간편
    • 단점: 초기 설정이 약간 복잡할 수 있음

마무리하며

비동기 처리는 현대 웹 애플리케이션에서 필수적인 개념입니다. 콜백 함수와 프로미스를 이해하고 적절히 활용함으로써, 여러분의 코드는 더욱 견고하고 유지보수가 용이해질 것입니다. 다음 포스트에서는 이 두 가지를 결합하여 더 복잡한 비동기 로직을 만드는 방법을 다뤄보겠습니다. 여러분의 프로젝트에 이 정보가 도움이 되길 바랍니다!

질문이나 의견이 있으면 댓글로 언제든지 남겨주세요! 그럼 다음 포스트에서 만나요!

728x90