Dart에서 비동기(asynchronous) 프로그래밍은 중요한 주제입니다. Dart에서 비동기 작업을 처리하는 주요 방법은 다음과 같습니다:
- async 및 await 키워드: Dart에서 비동기 코드를 작성할 때
async
함수와await
키워드를 사용합니다.async
키워드는 함수가 비동기적으로 실행될 수 있음을 나타내며,await
키워드는 비동기 함수에서 다른 비동기 함수가 완료될 때까지 기다릴 수 있게 합니다. 예시:
Future<void> fetchData() async {
var data = await fetchDataFromServer();
print(data);
}
- Future 및 Stream: Dart에서 비동기 작업을 수행하는 기본적인 방법은
Future
와Stream
을 사용하는 것입니다.Future
는 단일 비동기 작업의 결과를 나타내고,Stream
은 연속적인 이벤트 스트림을 나타냅니다. 예시:
Future<String> fetchDataFromServer() {
return Future.delayed(Duration(seconds: 2), () => 'Data from server');
}
Stream<int> countStream() async* {
for (int i = 0; i < 5; i++) {
await Future.delayed(Duration(seconds: 1));
yield i;
}
}
- Completer:
Completer
클래스를 사용하여 직접적으로 Future를 완료시킬 수 있습니다. 이는 일반적으로 Future를 사용할 때 콜백 기반의 코드를 Future로 감싸거나, 비동기 작업을 직접 제어해야 할 때 유용합니다. 예시:
Future<String> fetchUserData() {
Completer<String> completer = Completer<String>();
// 비동기 작업 수행 후 completer.complete()로 완료
return completer.future;
}
- Error Handling: Dart에서는
try-catch
블록을 사용하여 비동기 작업에서 발생하는 예외를 처리할 수 있습니다. 또한,Future
체인에서catchError
를 사용하여 에러를 처리할 수 있습니다. 예시:
Future<void> fetchData() async {
try {
var data = await fetchDataFromServer();
print(data);
} catch (e) {
print('Error fetching data: $e');
}
}
이러한 도구들을 사용하여 Dart에서 비동기 코드를 효과적으로 작성하고 관리할 수 있습니다.