본문 바로가기
Dart/Dart Server

[중급] Dart 서버 비동기 프로그래밍 심화/ Dart의 비동기 프로그래밍 심화 개념 (async/await, Future)

by Maccrey Coding 2024. 9. 11.
반응형

 

Dart는 비동기 프로그래밍을 지원하여 효율적인 데이터 처리를 가능하게 합니다.

비동기 프로그래밍을 잘 이해하면 네트워크 요청, 파일 읽기, 데이터베이스 작업 등 시간이 오래 걸리는 작업을 효율적으로 처리할 수 있습니다.

이번 블로그에서는 Dart의 비동기 프로그래밍 개념, 특히 async/await와 Future에 대해 심화 개념을 초보자도 쉽게 이해할 수 있도록 설명하겠습니다.

1. 비동기 프로그래밍이란?

비동기 프로그래밍은 프로그램이 특정 작업을 기다리지 않고 다른 작업을 동시에 처리할 수 있게 하는 프로그래밍 방식입니다.

비동기 프로그래밍을 사용하면 프로그램이 긴 작업을 기다리지 않고 다른 작업을 계속 진행할 수 있어, 더 빠르고 효율적인 코드 실행이 가능합니다.

2. Future란 무엇인가요?

Future는 Dart에서 비동기 작업의 결과를 나타내는 객체입니다. 미래에 완료될 작업을 표현하며, 작업이 완료되면 결과를 제공하거나 오류를 발생시킬 수 있습니다.

2.1 Future 생성하기

Future는 Future 클래스를 사용하여 생성합니다. 기본적인 Future 생성 방법은 다음과 같습니다.

Future<String> fetchData() {
  return Future.delayed(Duration(seconds: 2), () => 'Data fetched');
}
  • Future.delayed(): 지정된 시간 후에 결과를 반환하는 Future를 생성합니다.
  • Duration(seconds: 2): 2초 후에 결과를 반환합니다.
  • () => 'Data fetched': 2초 후에 반환될 결과입니다.

3. async와 await란 무엇인가요?

async와 await는 비동기 작업을 더 쉽게 다루기 위해 제공되는 키워드입니다. 이 두 키워드를 사용하면 비동기 작업을 동기적으로 작성할 수 있습니다.

3.1 async 키워드

async는 함수가 비동기 작업을 수행할 것임을 나타내는 키워드입니다. async가 붙은 함수는 항상 Future를 반환합니다.

Future<String> fetchData() async {
  return 'Data fetched';
}
  • async 키워드를 붙이면, 함수는 자동으로 Future를 반환합니다.

3.2 await 키워드

await는 비동기 작업의 결과를 기다리는 데 사용됩니다.

await는 async 함수 내에서만 사용할 수 있으며, Future가 완료될 때까지 기다립니다.

Future<void> printData() async {
  String data = await fetchData();
  print(data);
}
  • await fetchData(): fetchData()가 완료될 때까지 기다립니다.
  • print(data): fetchData()가 완료된 후 결과를 출력합니다.

4. 비동기 프로그래밍 예제

다음은 async/await와 Future를 사용하여 비동기 작업을 처리하는 예제입니다.

import 'dart:async';

Future<String> fetchData() {
  return Future.delayed(Duration(seconds: 2), () => 'Data fetched');
}

Future<void> main() async {
  print('Fetching data...');
  
  String data = await fetchData();
  
  print(data);
}
  • fetchData()는 2초 후에 'Data fetched' 문자열을 반환합니다.
  • await fetchData()는 fetchData()의 결과가 반환될 때까지 기다립니다.
  • print(data)는 결과를 출력합니다.

5. 에러 처리하기

비동기 작업에서 에러를 처리하는 방법도 중요합니다. try/catch 블록을 사용하여 비동기 함수에서 발생하는 에러를 처리할 수 있습니다.

Future<void> main() async {
  try {
    String data = await fetchData();
    print(data);
  } catch (e) {
    print('Error: $e');
  }
}
  • try: 비동기 작업을 시도합니다.
  • catch: 에러가 발생하면 에러를 처리합니다.

6. 병렬 비동기 작업 처리하기

여러 비동기 작업을 동시에 실행할 때는 Future.wait()을 사용하여 모든 작업이 완료될 때까지 기다릴 수 있습니다.

Future<String> fetchData1() {
  return Future.delayed(Duration(seconds: 2), () => 'Data 1');
}

Future<String> fetchData2() {
  return Future.delayed(Duration(seconds: 3), () => 'Data 2');
}

Future<void> main() async {
  List<String> results = await Future.wait([fetchData1(), fetchData2()]);
  
  print(results); // [Data 1, Data 2]
}
  • Future.wait(): 여러 Future 객체를 받아서 모든 작업이 완료될 때까지 기다립니다.

 

Dart에서 비동기 프로그래밍을 활용하면 시간이 오래 걸리는 작업을 효율적으로 처리할 수 있습니다.

Future와 async/await를 사용하면 비동기 작업을 더 간단하고 이해하기 쉽게 작성할 수 있습니다.

이 블로그가 Dart에서 비동기 프로그래밍을 이해하는 데 도움이 되었기를 바랍니다.

 

추가적인 질문이나 도움이 필요하시면 언제든지 말씀해 주세요!

 

구독!! 공감과 댓글은 저에게 큰 힘이 됩니다.

Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

 

 

반응형