자바스크립트 클래스를 사용하여 어떻게 비동기 작업을 관리할 수 있나요?

비동기 작업은 웹 개발에서 매우 중요한 요소입니다. 사용자와 상호작용하거나 외부 API와의 통신 등, 많은 상황에서 비동기 작업이 필요합니다. 자바스크립트에서는 비동기 작업을 처리하기 위해 콜백 함수, 프로미스 등 다양한 방법을 제공합니다. 이 중에서 자바스크립트 클래스를 사용하여 비동기 작업을 관리하는 방법을 알아보겠습니다.

1. 클래스로 비동기 작업 모듈화

비동기 작업을 관리하기 위해 클래스를 사용하면 구조화된 모듈화가 가능해집니다. 예를 들어, 데이터를 가져오는 API 요청을 처리하는 클래스를 생성하고 해당 클래스의 인스턴스를 사용하여 작업을 수행할 수 있습니다.

class DataFetcher {
  async fetchData(url) {
    try {
      const response = await fetch(url);
      const data = await response.json();
      return data;
    } catch (error) {
      console.error('Data fetching error:', error);
      throw error;
    }
  }
}

const dataFetcher = new DataFetcher();
const url = 'https://example.com/api/data';
dataFetcher.fetchData(url)
  .then(data => {
    console.log('Data fetched:', data);
  })
  .catch(error => {
    console.error('Data fetch failed:', error);
  });

위 예시에서는 DataFetcher 클래스를 사용하여 데이터를 가져오는 비동기 작업을 처리합니다. fetchData 메서드는 await 키워드를 사용하여 API 응답을 기다리고, 에러가 발생한 경우 catch 블록에서 에러를 처리합니다.

2. 상태 관리와 메서드 분리

클래스를 사용하여 비동기 작업을 관리할 때, 상태를 관리하고 메서드를 분리하는 것이 중요합니다. 비동기 작업을 수행하는 동안 상태를 추적하고, 작업의 성공 또는 실패에 대한 처리를 분리하는 방향으로 클래스를 설계하는 것이 좋습니다.

class DataFetcher {
  constructor() {
    this.loading = false;
    this.data = null;
    this.error = null;
  }

  async fetchData(url) {
    this.loading = true;
    try {
      const response = await fetch(url);
      const data = await response.json();
      this.data = data;
    } catch (error) {
      console.error('Data fetching error:', error);
      this.error = error;
    } finally {
      this.loading = false;
    }
  }
}

const dataFetcher = new DataFetcher();
const url = 'https://example.com/api/data';
dataFetcher.fetchData(url)
  .then(() => {
    console.log('Data fetched:', dataFetcher.data);
  })
  .catch(error => {
    console.error('Data fetch failed:', error);
  });

위 예시에서는 DataFetcher 클래스의 생성자에서 loading, data, error 세 가지 상태를 초기화합니다. fetchData 메서드는 작업을 수행하는 동안 loading 상태를 true로 설정하고, 작업이 완료되면 loading 상태를 false로 설정합니다. 성공한 경우 data 상태에 데이터를 할당하고, 실패한 경우 error 상태에 에러를 할당합니다.

3. 이벤트 또는 콜백 활용

클래스를 사용하여 비동기 작업을 관리하는 다른 방법 중 하나는 이벤트 또는 콜백을 활용하는 것입니다. 비동기 작업이 완료되었을 때 이벤트를 발생시키거나 콜백 함수를 호출하여 결과를 전달할 수 있습니다.

class DataFetcher {
  fetchData(url, callback) {
    fetch(url)
      .then(response => response.json())
      .then(data => callback(null, data))
      .catch(error => callback(error, null));
  }
}

const dataFetcher = new DataFetcher();
const url = 'https://example.com/api/data';
dataFetcher.fetchData(url, (error, data) => {
  if (error) {
    console.error('Data fetch failed:', error);
  } else {
    console.log('Data fetched:', data);
  }
});

위 예시에서는 DataFetcher 클래스의 fetchData 메서드가 콜백 함수를 인자로 받습니다. 데이터를 가져오는데 성공한 경우 null을 첫 번째 인자로, 실패한 경우 에러를 첫 번째 인자로 전달하여 콜백 함수를 호출합니다.

마무리

자바스크립트 클래스를 사용하여 비동기 작업을 관리하는 방법을 간단히 알아보았습니다. 클래스로 모듈화하여 상태를 관리하고 메서드를 분리하면 비동기 작업을 더 구조화하고 이해하기 쉬워집니다. 또한 이벤트나 콜백을 활용하여 비동기 작업의 결과를 전달할 수도 있습니다. 적절한 방법을 선택하여 비동기 작업을 효과적으로 관리해보세요.

#javascript #비동기작업