자바스크립트 async/await를 이용한 리팩토링

자바스크립트의 비동기 프로그래밍은 콜백과 프로미스(Promise)를 사용하여 처리됩니다. 그러나 콜백은 복잡성을 증가시키고 가독성을 떨어뜨리기 때문에 코드를 유지 보수하거나 확장하기 어렵게 만들 수 있습니다.

자바스크립트의 async/await는 비동기 코드를 동기식으로 작성할 수 있도록 도와주는 문법입니다. 이를 사용하면 코드를 보다 간단하고 명확하게 작성할 수 있으며, 코드의 가독성과 유지 보수성을 향상시킬 수 있습니다.

1. async 함수 정의하기

async 함수는 비동기적으로 실행되는 함수를 정의하는 키워드입니다. 함수 본문에는 await 키워드가 포함되어야 합니다. 이 키워드는 비동기 코드의 실행을 일시 중지하고 프로미스가 처리되는 것을 기다립니다.

async function getData() {
  // 비동기 작업 수행
  const data = await fetch('https://api.example.com/data');
  
  return data;
}

위의 예제에서 fetch 함수는 서버에서 데이터를 가져오는 비동기 작업을 수행합니다. await 키워드는 fetch 함수가 프로미스를 반환할 때까지 코드 실행을 일시 중지하고, 프로미스가 처리되면 해당 값을 반환합니다.

2. await를 사용하여 비동기 작업 처리하기

await 키워드를 사용하여 비동기 작업을 처리할 수 있습니다. 이 키워드 다음에 오는 표현식은 프로미스나 프로미스를 반환하는 비동기 함수여야 합니다. await 키워드가 포함된 함수는 비동기 함수여야 하기 때문에, awaitasync 함수 안에서만 사용할 수 있습니다.

async function processData() {
  try {
    const data = await getData();
    console.log(data);
  } catch (error) {
    console.error(error);
  }
}

위의 예제에서 getData 함수의 비동기 작업을 처리하기 위해 await 키워드를 사용하였습니다. getData 함수가 프로미스를 반환할 때까지 코드 실행은 일시 중지되고, 프로미스가 처리되면 해당 값을 data 변수에 할당합니다.

3. 에러 처리하기

async/await을 사용하여 비동기 코드를 처리할 때, 예외(에러) 처리도 중요한 부분입니다. 비동기 작업을 수행하는 함수를 try/catch 블록으로 감싸서 예외를 처리할 수 있습니다.

async function processData() {
  try {
    const data = await getData();
    console.log(data);
  } catch (error) {
    console.error(error);
  }
}

위의 예제에서 getData 함수에서 발생하는 예외를 try/catch 블록으로 처리하고 있습니다. 비동기 작업에서 발생한 예외는 catch 블록 안에서 처리되고, 이를 통해 에러를 적절히 다룰 수 있습니다.

4. 비동기 작업의 병렬 처리하기

async/await를 사용하면 여러 개의 비동기 작업을 병렬로 처리할 수 있습니다. 이를 위해 Promise.all()을 사용하면 됩니다. Promise.all()은 여러 개의 프로미스를 동시에 실행하고, 모든 프로미스가 처리될 때까지 기다리고 그 결과를 배열로 반환합니다.

async function processMultipleData() {
  try {
    const promises = [getData1(), getData2(), getData3()];
    const results = await Promise.all(promises);
    
    console.log(results);
  } catch (error) {
    console.error(error);
  }
}

위의 예제에서 getData1, getData2, getData3 함수가 각각 다른 비동기 작업을 수행하고 있습니다. 이들을 병렬로 실행하기 위해 Promise.all()을 사용하였고, 결과는 results 배열에 담아 출력합니다.

결론

자바스크립트의 async/await을 이용하면 비동기 코드를 동기식으로 작성할 수 있어 가독성이 좋아지고 유지 보수성이 향상됩니다. async/await은 비동기 작업의 순차 처리와 병렬 처리를 간편하게 해주는 강력한 도구입니다. 비동기 코드를 작성할 때는 async/await을 적절히 활용하여 클린하고 효율적인 코드를 만들 수 있습니다.