프론트엔드 개발 · 중급
Promise와 async/await의 차이점과 에러 처리 방법에 대해 설명해주세요.
힌트 · 가독성, 에러 처리, 동시 실행 관점에서 비교해보세요.
Promiseasync/awaitSyntactic Sugartry...catch.catch()
모범답안
Promise와 async/await는 둘 다 JavaScript에서 비동기 코드를 처리하는 데 사용됩니다. Promise는 비동기 작업의 최종 완료(성공 또는 실패)를 나타내는 객체이고, async/await는 Promise를 더 쉽게 사용할 수 있도록 해주는 문법적 설탕(Syntactic Sugar)입니다.
가장 큰 차이점은 가독성입니다. async/await를 사용하면 코드가 동기 코드처럼 보여서 이해하기 쉽습니다.
에러 처리 방식도 차이가 있습니다. Promise는 .catch() 메서드를 사용하여 에러를 처리하지만, async/await는 try...catch 구문을 사용하여 동기 코드처럼 에러를 처리할 수 있습니다.
// Promise
fetchData()
.then(data => processData(data))
.catch(error => console.error(error));
// async/await
async function fetchDataAndProcess() {
try {
const data = await fetchData();
processData(data);
} catch (error) {
console.error(error);
}
}
동시 실행 측면에서는 Promise.all() 등을 사용하여 여러 Promise를 병렬로 실행할 수 있고, async/await에서도 Promise를 활용하여 병렬 처리를 구현할 수 있습니다. async/await는 기본적으로 순차적으로 실행되지만, Promise와 함께 사용하면 동시성을 확보할 수 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 JavaScript 면접 질문
- JavaScript의 Rest 파라미터와 Spread 연산자의 차이점과 사용법을 설명해주세요.
- JavaScript의 클로저(Closure)란 무엇이며, 실제 사용 예시를 들어주세요.
- JavaScript의 이벤트 루프(Event Loop)와 비동기 처리 방식에 대해 설명해주세요.
- JavaScript의 this 바인딩 규칙에 대해 설명해주세요.
- JavaScript의 프로토타입(Prototype)과 프로토타입 체인에 대해 설명해주세요.
- JavaScript의 가비지 컬렉션(Garbage Collection) 동작 방식에 대해 설명해주세요.