전 블로그에서는 callback hell 문제를 해결하기 위한 Promise/then에 대해 알아 봤습니다. 이 Promise/then 도 문제가 있는데 그것은 채널링(then을 여러번 사용해야 하는 경우) 문제와 예외 처리시 .catch의 사용 등의 문제가 있습니다.
JavaScript에는 비동기 작업을 처리하기 위해 사용되는 다양한 기술이 있지만, async/await는 최근 많은 개발자들에게 인기가 높아지고 있는 기술입니다. 이 기술은 코드를 읽고 유지보수하기 쉽게 만들어주며, 비동기 작업을 처리하는 데 매우 유용합니다. 이 글에서는 JavaScript의 async/await 사용의 이점과 예제에 대해 자세히 살펴보겠습니다.
1. 비동기 작업 처리를 간편하게
JavaScript는 싱글 스레드 언어이기 때문에 여러 작업을 동시에 처리할 수 없습니다. 그렇기 때문에 비동기 작업을 처리해야 하는 경우가 많습니다. async/await는 이러한 비동기 작업을 처리하기 위한 최신 기술 중 하나입니다. 이전에는 콜백 함수나 Promise를 사용해야 했지만, async/await를 사용하면 코드를 간결하게 작성할 수 있습니다.
2. 코드 가독성 향상
콜백 함수나 Promise를 사용하면 코드의 들여쓰기가 많아지고, 가독성이 떨어지는 경우가 많습니다. 그러나 async/await를 사용하면 코드의 들여쓰기가 줄어들어 가독성이 높아집니다. 또한, 코드가 동기적으로 작성된 것처럼 보이기 때문에 유지보수하기 쉬워집니다.
3. 오류 처리 용이성
콜백 함수나 Promise를 사용하면 오류 처리가 복잡해질 수 있습니다. 그러나 async/await를 사용하면 try-catch 구문을 사용하여 오류 처리를 간단하게 처리할 수 있습니다.
4. 예제: async/await를 사용한 API 호출
다음은 async/await를 사용하여 API 호출을 처리하는 예제입니다. 이 예제에서는 fetch() 함수를 사용하여 JSON 데이터를 가져오는 예제를 보여줍니다.
async function fetchData() {
try {
const response = await fetch('https://jsonplaceholder.typicode.com/posts');
const data = await response.json();
console.log(data);
} catch (error) {
console.log(error);
}
}
fetchData();
이 예제에서는 fetchData() 함수를 async 함수로 선언하고, try-catch 구문을 사용하여 오류 처리를 합니다. fetch() 함수를 사용하여 데이터를 가져오고, await 키워드를 사용하여 비동기적으로 데이터를 처리합니다.
5. 예제: Promise/then 과 async/await 비교
async/await와 Promise/then의 장점을 보여주는 좋은 예제 중 하나는 데이터베이스에서 데이터를 가져와 웹 페이지에 표시하는 것입니다.
Promise/then을 사용하는 경우, 다음과 같은 코드를 작성해야 합니다.
function getUsers() {
return fetch('https://jsonplaceholder.typicode.com/users')
.then(response => response.json())
.then(data => {
const names = data.map(user => user.name);
console.log(names);
})
.catch(error => console.log(error));
}
getUsers();
이 코드는 데이터베이스에서 사용자 데이터를 가져와 이름만 추출합니다. Promise/then은 데이터를 비동기적으로 처리하므로 then() 메서드를 체인으로 연결해야 합니다. 코드가 복잡해지고 가독성이 떨어지는 문제가 있습니다.
async/await을 사용하는 경우, 다음과 같은 코드를 작성할 수 있습니다.
async function getUsers() {
try {
const response = await fetch('https://jsonplaceholder.typicode.com/users');
const data = await response.json();
const names = data.map(user => user.name);
console.log(names);
} catch (error) {
console.log(error);
}
}
getUsers();
이 코드는 Promise/then과 같은 작업을 수행하지만, 코드가 더 간결하고 가독성이 좋습니다. async/await를 사용하면 코드가 동기적으로 작성된 것처럼 보이기 때문에, 가독성과 유지보수성이 높아집니다. 또한, try-catch 구문을 사용하여 오류 처리가 더욱 간편해집니다.
따라서, async/await는 Promise/then 대비 더욱 간결하고 가독성이 좋은 코드를 작성할 수 있도록 도와줍니다.
6. 결론
JavaScript의 async/await를 사용하면 비동기 작업 처리를 간편하게 할 수 있으며, 코드의 가독성과 유지보수성을 향상시킬 수 있습니다. 또한, 오류 처리가 간편해지므로 코드를 더욱 안정적으로 만들 수 있습니다.
7. 자주 묻는 질문(FAQ)
Q1. async/await와 Promise의 차이점은 무엇인가요?
A1. async/await는 Promise를 기반으로 하며, 코드의 가독성을 향상시켜주는 기술입니다. async/await는 Promise의 then() 메서드를 대체할 수 있으며, 코드의 들여쓰기를 줄여 가독성을 높여줍니다.
Q2. async/await는 항상 사용해야 할까요?
A2. async/await는 모든 상황에서 사용할 수 있는 기술은 아닙니다. 예를 들어, 루프를 돌면서 비동기 작업을 처리해야 하는 경우에는 Promise를 사용하는 것이 더 효율적일 수 있습니다.
Q3. async/await의 성능은 어떻게 되나요?
A3. async/await는 Promise를 기반으로 하므로, Promise와 비슷한 성능을 보입니다. 또한, 코드의 가독성을 향상시켜줌으로써 코드의 유지보수성을 높여줍니다.