프로그래밍을 하다 보면 작업을 처리하는 방식에 따라 동기(Synchronous)와 비동기(Asynchronous)로 나뉘게 됩니다.
동기와 비동기을 하단과 같이 알아보도록하겠습니다.
- 개념
- 차이점
- 자바스크립트 처리 과정, 관련된 코드를 작성해보겠습니다.
동기 프로그래밍은 코드가 작성된 순서대로 작업이 처리되는 방식입니다.
각 작업이 끝날 때까지 다음 작업이 대기합니다.
즉, 하나의 작업이 완료되기 전까지는 다른 작업이 실행되지 않습니다.
그림 출처: 기술노트 유튜브
프로그램이 순차적으로 진행될때 func()함수를 만나 해당 안에 작업을 모두 완료하고 나오는 모습을 도식화한 이미지이다.
동기의 특징
동기 방식 예시(code)
function syncTask() {
console.log("첫 번째 작업 시작");
for (let i = 0; i < 1000000000; i++) {} // 시간 지연을 위한 작업
console.log("첫 번째 작업 완료");
console.log("두 번째 작업 시작");
console.log("두 번째 작업 완료");
}
syncTask();
장점
단점
비동기 프로그래밍은 작업이 병렬로 처리될 수 있도록 합니다.
어떤 작업이 끝나기를 기다리지 않고, 다른 작업을 진행이 가능합니다.
자바스크립트에서 비동기는 주로 콜백 함수, Promise, 그리고 async/await 기능을 사용하여 구현됩니다.
그림 출처: 기술노트 유튜브
프로그램이 순차적으로 진행될때 func()함수를 만나도 순차적으로 진행되며 callback 함수가 func()에게 확인 요청 전송시 func()함수를 확인 가능하다.
비동기 함수 정리
- 콜백(callback)
- Promise
- async/await
1. 콜백(callback) 함수 방식의 비동기 처리
콜백(callback) 함수는 작업이 완료된 후 호출되는 함수입니다.
이는 비동기적으로 실행될 작업을 정의하는 데 유용합니다.
function asyncTask(callback) {
console.log("첫 번째 작업 시작");
setTimeout(() => {
console.log("첫 번째 작업 완료");
callback();
}, 2000);
}
function secondTask() {
console.log("두 번째 작업 시작");
consol![](https://velog.velcdn.com/images/yoon_min/post/4bbce093-1d6b-4ae7-b429-958ee92c96b2/image.jpeg)
e.log("두 번째 작업 완료");
}
asyncTask(secondTask);
위 코드에서는 첫 번째 작업이 2초 후에 완료되고, 콜백 함수로 두 번째 작업이 실행됩니다.
2. Promise 방식의 비동기 처리
Promise는 비동기 작업을 처리하기 위한 또 다른 방법입니다.
then 메서드를 사용하여 작업 완료 후의 처리를 정의합니다.
function asyncTaskWithPromise() {
return new Promise((resolve) => {
console.log("첫 번째 작업 시작");
setTimeout(() => {
console.log("첫 번째 작업 완료");
resolve();
}, 2000);
});
}
asyncTaskWithPromise().then(() => {
console.log("두 번째 작업 시작");
console.log("두 번째 작업 완료");
});
3. async와 await방식의 비동기 처리
async와 await는 Promise를 더 쉽게 사용할 수 있도록 도와주는 문법입니다.
await 키워드는 비동기 작업이 완료될 때까지 기다렸다가 작업을 계속 진행합니다.
async function asyncTaskWithAwait() {
console.log("첫 번째 작업 시작");
await new Promise(resolve => setTimeout(resolve, 2000));
console.log("첫 번째 작업 완료");
console.log("두 번째 작업 시작");
console.log("두 번째 작업 완료");
}
asyncTaskWithAwait();
위 코드에서는 await를 사용해 첫 번째 작업이 끝날 때까지 기다리고
그 후 두 번째 작업이 실행됩니다.
비동기의 특징
장점
단점
동기와 비동기 비교
동기(Synchronous)
비동기(Asynchronous)
결론
동기와 비동기 프로그래밍은 각각의 장단점을 가지고 있으며, 상황에 맞게 적절히 사용하는 것이 중요합니다.
자바스크립트에서는 기본적으로 비동기 처리를 많이 사용하지만, 그 과정에서 콜백 함수, Promise, async/await와 같은 다양한 기법을 활용할 수 있습니다.
성능과 코드 가독성을 고려하면서 적절한 방법을 선택해 구현하는 것이 핵심입니다.