자바스크립트 async/await를 이용한 알고리즘 구현

알고리즘은 프로그래밍에서 문제를 해결하기 위한 절차적인 방법을 정의하는 것입니다. 자바스크립트에서 알고리즘을 구현할 때, 비동기적인 작업을 처리해야 하는 경우가 있습니다. 이때, async/await 구문을 사용하면 간편하게 비동기 코드를 처리할 수 있습니다.

async/await란?

async/await는 자바스크립트에서 비동기적인 코드를 작성할 수 있게 해주는 문법입니다. 이 구문을 사용하면 Promise 객체를 좀 더 직관적이고 동기적인 방식으로 다룰 수 있습니다.

async 함수 선언하기

async function 키워드를 사용하여 비동기 함수를 선언할 수 있습니다. async 키워드를 함수 앞에 붙이면 해당 함수는 비동기 함수로 정의됩니다. 이 함수는 항상 Promise 객체를 반환하며, 내부에 await 표현식을 사용할 수 있습니다.

async function myAsyncFunction() {
  // 비동기 작업
  const result = await someAsyncOperation();
  // 결과 반환
  return result;
}

await 표현식 사용하기

await 표현식은 async 함수 내부에서만 사용할 수 있으며, Promise 객체가 해결될 때까지 코드의 실행을 일시 정지시킵니다. 이를 통해 프로그램의 흐름을 동기적으로 다룰 수 있습니다.

async function myAsyncFunction() {
  const result = await someAsyncOperation();
  console.log(result);
}

myAsyncFunction();

위 코드에서 someAsyncOperation()은 Promise 객체를 반환하는 비동기 작업을 수행하는 함수입니다. await 키워드를 사용하면 someAsyncOperation()이 해결될 때까지 코드의 실행을 일시 정지시키고, 해결된 Promise의 결과를 result 변수에 할당합니다.

예제: 비동기적인 숫자 배열 덧셈

아래 예제는 비동기적인 숫자 배열의 합을 계산하는 함수를 구현한 코드입니다.

async function sumAsyncNumbers(numbers) {
  let sum = 0;
  for (let i = 0; i < numbers.length; i++) {
    sum += await asyncAddition(numbers[i]);
  }
  return sum;
}

async function asyncAddition(number) {
  return new Promise((resolve) => {
    setTimeout(() => resolve(number + number), 1000);
  });
}

const numbers = [1, 2, 3, 4, 5];
sumAsyncNumbers(numbers)
  .then((result) => {
    console.log(result); // 30
  })
  .catch((error) => {
    console.error(error);
  });

위 코드에서 sumAsyncNumbers 함수는 비동기적으로 실행되는 asyncAddition 함수를 호출하여 주어진 숫자 배열의 합을 계산합니다. asyncAddition 함수는 setTimeout 함수를 사용하여 1초 후에 주어진 숫자를 두 배로 증가시킨 값을 반환하는 Promise 객체를 생성합니다.

sumAsyncNumbers 함수는 await 표현식을 사용하여 asyncAddition 함수가 완료될 때까지 실행을 일시 정지시킵니다. 이렇게 함으로써 순차적으로 각 숫자를 더할 수 있습니다.

결과는 then 메서드를 사용하여 비동기 작업이 완료된 후에 처리됩니다. catch 메서드를 사용하여 오류 처리도 가능합니다.


자바스크립트에서 async/await를 사용하면 비동기적인 작업을 더욱 간편하게 다룰 수 있습니다. 이를 이용하여 알고리즘을 구현하면 코드의 가독성과 유지보수성을 높일 수 있습니다. 비동기 코드를 다루어야 하는 경우에는 async/await를 적극 활용해보세요.