JavaScript에서 비동기 처리는 웹 개발에서 매우 중요한 역할을 합니다. 비동기 처리를 통해 웹 애플리케이션은 브라우저가 멈추지 않고 계속해서 응답할 수 있게 해줍니다. JavaScript에서 비동기 처리를 구현하는 방법은 여러 가지가 있으며, 가장 일반적인 세 가지 방법은 콜백, 프로미스, 그리고 async/await입니다. 각 방법은 고유한 장단점을 가지고 있으며, 상황에 따라 적절한 방법을 선택하는 것이 중요합니다.
콜백 함수는 JavaScript에서 비동기 처리를 구현하는 가장 기본적인 방법 중 하나입니다. 함수의 인자로 다른 함수를 전달하여, 특정 작업이 완료된 후 인자로 전달된 함수가 실행되도록 합니다. 콜백은 간단하고 이해하기 쉽지만, '콜백 지옥'이라 불리는 중첩 구조를 만들기 쉬워 코드가 복잡해질 수 있습니다.
function fetchData(callback) {
setTimeout(() => {
console.log("Data fetched");
callback();
}, 1000);
}
fetchData(() => {
console.log("Callback executed");
});
프로미스는 콜백을 사용하는 것보다 가독성이 좋고 체계적인 방법으로 비동기 코드를 작성할 수 있게 해줍니다. 프로미스는 비동기 작업이 완료되었을 때 성공 또는 실패를 나타내는 객체를 반환합니다. then()
과 catch()
메서드를 사용하여 작업 완료 후의 행동을 정의할 수 있습니다.
function fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log("Data fetched");
resolve();
}, 1000);
});
}
fetchData()
.then(() => {
console.log("Promise resolved");
})
.catch(() => {
console.error("Promise rejected");
});
async/await는 프로미스를 기반으로 한 문법적 설탕(Syntactic Sugar)으로, 비동기 코드를 마치 동기 코드처럼 작성할 수 있게 해줍니다. 함수 앞에 async
키워드를 붙이고, 비동기 작업 앞에 await
키워드를 사용하여 프로미스가 해결될 때까지 기다립니다. 이는 코드의 가독성을 크게 향상시킵니다.
async function fetchData() {
await new Promise((resolve) => {
setTimeout(() => {
console.log("Data fetched");
resolve();
}, 1000);
});
console.log("Async/await completed");
}
fetchData();
이 세 가지 방법은 모두 비동기 처리를 위한 훌륭한 도구입니다. 콜백은 간단한 작업에 적합하고, 프로미스는 더 복잡한 비동기 흐름을 처리하기에 적합하며, async/await는 코드의 가독성을 극대화하는 데 유리합니다. 각각의 방법을 잘 이해하고 상황에 맞게 활용하는 것이 중요합니다.