
동기와 비동기는 프로그램이 작업을 처리하는 방식에 대한 개념이다.
동기 방식은 코드가 작성된 순서대로 실행되며, 하나의 작업이 끝나야 다음 작업이 실행되는 방식을 말한다.
비동기 방식은 특정 작업이 완료될 때까지 기다리지 않고, 다음 작업을 먼저 실행하는 방식이다.
비동기 작업이 끝난 후 실행할 함수를 전달하는 방식이다.
function fetchData(callback) {
setTimeout(() => {
console.log("데이터 가져오기 완료");
callback();
}, 2000);
}
fetchData(() => {
console.log("다음 작업 실행");
});
⚠️ 콜백 지옥 문제-!!
콜백을 여러 번 중첩하면 코드가 복잡해져서 유지 보수가 어려워질 수 있다.
Promise를 사용하면 콜백 지옥을 해결할 수 있다.
function fetchData() {
return new Promise((resolve) => {
setTimeout(() => {
console.log("데이터 가져오기 완료");
resolve();
}, 2000);
});
}
fetchData().then(() => {
console.log("다음 작업 실행");
});
async/await을 사용하면 동기 코드 처럼 읽기 쉬운 비동기 코드를 만들 수 있다.
async function fetchData() {
await new Promise((resolve) => setTimeout(resolve, 2000));
console.log("데이터 가져오기 완료");
}
async function main() {
console.log("첫 번째 작업");
await fetchData();
console.log("다음 작업 실행");
}
main();
💡 결과
첫 번째 작업
(2초 대기)
데이터 가져오기 완료
다음 작업 실행
await 덕분에 코드가 동기 방식처럼 읽히지만, 실제로는 비동기로 실행된다-!!
async/await이 가장 읽기 쉽고 직관적인 방식 !