자바스크립트는 싱글 스레드로 동작하는 언어이기 때문에 동시에 여러 작업을 처리하는 동시성을 제공할 수 없습니다. 하지만 비동기로 동작하는 작업을 통해 동시성과 비슷한 효과를 낼 수 있습니다.
콜백 함수로 비동기 작업 처리하기
자바스크립트에서 가장 일반적인 비동기 작업 처리 방법은 콜백 함수를 사용하는 것입니다. 콜백 함수는 비동기 작업이 완료되면 호출되는 함수로, 비동기 작업을 실행하고 나서 다음 작업을 수행할 수 있도록 도와줍니다.
setTimeout(() => {
console.log('비동기 작업 완료');
}, 5000);
console.log('다음 작업 시작');
위 코드에서 setTimeout
함수는 5초 후에 콜백 함수를 호출하는 비동기 작업을 수행합니다. 이후 console.log('다음 작업 시작')
이 실행되고, 5초 후에는 console.log('비동기 작업 완료')
가 실행됩니다.
Promise로 비동기 작업 관리하기
ES6부터는 Promise라는 객체를 사용하여 비동기 작업을 더욱 편리하게 처리할 수 있게 되었습니다. Promise는 비동기 작업의 성공 또는 실패를 처리하는 콜백을 정의하고, 작업이 완료될 때까지 기다릴 수 있는 기능을 제공합니다.
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('비동기 작업 완료');
}, 5000);
});
promise.then((result) => {
console.log(result);
}).catch((error) => {
console.log(error);
});
console.log('다음 작업 시작');
위 코드에서 new Promise()
를 사용하여 새로운 Promise 객체를 생성합니다. 콜백 함수 내에서 비동기 작업이 완료되면 resolve
함수를 호출하여 성공을 처리합니다. then
메소드를 사용하여 성공 시 실행할 콜백 함수를 등록하고, catch
메소드를 사용하여 실패 시 실행할 콜백 함수를 등록합니다.
async/await를 사용하여 동기적인 코드 작성하기
ES8부터는 async/await라는 키워드를 사용하여 동기적인 코드와 같은 구조로 비동기 작업을 처리할 수 있게 되었습니다. async 키워드로 함수를 선언하고, await 키워드로 비동기 작업이 완료될 때까지 기다릴 수 있습니다.
async function doAsync() {
const result = await new Promise((resolve) => {
setTimeout(() => {
resolve('비동기 작업 완료');
}, 5000);
});
console.log(result);
console.log('다음 작업 시작');
}
doAsync();
위 코드에서 doAsync
함수를 async로 선언하고, 내부에서 Promise를 생성하여 await 키워드와 함께 사용합니다. 비동기 작업이 완료되면 결과값을 리턴하고, 이를 result 변수에 할당합니다.
이러한 방식으로 async/await를 사용하면 비동기 코드를 동기 코드와 같은 순서로 작성할 수 있어 가독성이 향상됩니다.
정리
자바스크립트에서는 동시성을 직접적으로 제공하지 않지만, 콜백 함수, Promise, async/await를 사용하여 비동기 작업을 처리하고 동시성과 비슷한 효과를 낼 수 있습니다. 이러한 동기화 기법을 활용하여 자바스크립트에서 효율적인 비동기 프로그래밍을 할 수 있습니다.
#javascript #비동기 #동시성