자바스크립트는 단일 스레드 프로그래밍 언어입니다. 이것은 자바스크립트가 한 번에 하나의 작업만 수행할 수 있음을 의미합니다. 하지만 웹 브라우저에서 동작하는 자바스크립트는 API 호출, 이미지 로딩, 사용자 이벤트 등 비동기 처리가 필수입니다. 이를 가능하게 하는 방법 중 하나가 바로 Promise와 Async/Await입니다.
Promise
Promise는 자바스크립트에서 비동기 연산을 표현하는 객체입니다. Promise는 세 가지 상태를 가집니다: 대기(pending), 이행(fulfilled), 거부(rejected).
let promise = new Promise(function(resolve, reject) {
// 비동기 작업을 수행하고,
// 작업이 성공하면 resolve 호출
// 실패하면 reject 호출
});
then 메서드를 이용해 Promise의 결과를 처리할 수 있습니다. 첫 번째 인자는 Promise가 성공적으로 이행된 경우를, 두 번째 인자는 거부된 경우를 처리합니다.
promise
.then(function(result) {
// 이행된 경우 실행
}, function(error) {
// 거부된 경우 실행
});
Async/Await
Async/Await는 ES7에서 도입된, Promise를 더 쉽게 사용할 수 있는 문법입니다. 함수 앞에 async 키워드를 사용하면 해당 함수는 항상 Promise를 반환합니다. 또한, async 함수 내부에서 await 키워드를 사용하면 Promise가 이행될 때까지 함수의 실행을 일시적으로 중단하고, 이행될 때 결과를 반환합니다.
async function foo() {
try {
let result = await someAsyncOperation();
console.log(result);
} catch (error) {
console.error(error);
}
}
Async/Await는 비동기 코드를 동기식으로 작성할 수 있게 해서 코드의 가독성을 크게 향상시킵니다.
마치며
비동기 프로그래밍은 자바스크립트의 핵심 부분입니다. Promise와 Async/Await를 이해하고 활용하면 복잡한 비동기 로직도 쉽게 관리할 수 있습니다. 이를 통해 더 효율적인 코드를 작성할 수 있을 것입니다.
댓글