Dart 학습: 비동기 프로그래밍
비동기 프로그래밍은 시간이 걸리는 작업을 효율적으로 처리할 수 있게 해줍니다. Dart에서는 Future, async, await, 그리고 Stream을 사용하여 비동기 프로그래밍을 구현할 수 있습니다. 이번 글에서는 Future 사용법, 비동기 함수 작성 및 호출, 스트림 사용법에 대해 알아보겠습니다.
1. Future: Future 사용법
Future는 비동기 작업의 결과를 나타내는 객체입니다. Future는 시간이 걸리는 작업이 완료된 후 값을 반환하거나, 오류가 발생할 경우 예외를 던질 수 있습니다.
Future 사용 예제:
// 2초 후에 결과 반환
return Future.delayed(Duration(seconds: 2), () => 'User Order: Latte');
}
void main() {
print('Fetching user order...');
Future<String> order = fetchUserOrder();
order.then((value) {
print(value); // User Order: Latte 출력
}).catchError((error) {
print('Error: $error');
});
print('Order request sent');
}
위의 예제에서 fetchUserOrder 함수는 Future.delayed를 사용하여 2초 후에 결과를 반환하는 Future를 생성합니다. then 메서드를 사용하여 비동기 작업이 완료된 후 결과를 처리할 수 있습니다.
2. async와 await: 비동기 함수 작성 및 호출
async와 await 키워드를 사용하면 비동기 함수를 작성하고 호출할 때 동기 함수처럼 직관적으로 코드를 작성할 수 있습니다.
async와 await 사용 예제:
return Future.delayed(Duration(seconds: 2), () => 'User Order: Latte');
}
Future<void> main() async {
print('Fetching user order...');
try {
String order = await fetchUserOrder();
print(order); // User Order: Latte 출력
} catch (error) {
print('Error: $error');
}
print('Order request sent');
}
위의 예제에서 main 함수는 async로 선언되어 비동기 함수를 호출할 수 있습니다. await 키워드를 사용하여 Future가 완료될 때까지 기다린 후 결과를 처리합니다.
3. Stream: 스트림 사용법
Stream은 비동기 데이터의 연속적인 흐름을 처리하는데 사용됩니다. 스트림은 여러 개의 비동기 이벤트를 순차적으로 처리할 수 있습니다.
Stream 사용 예제:
for (int i = 1; i <= to; i++) {
await Future.delayed(Duration(seconds: 1));
yield i;
}
}
Future<void> main() async {
Stream<int> stream = countStream(5);
await for (int value in stream) {
print(value); // 1부터 5까지 1초 간격으로 출력
}
}
위의 예제에서 countStream 함수는 비동기적으로 숫자를 생성하는 Stream을 반환합니다. async* 키워드와 yield를 사용하여 스트림 데이터를 생성합니다. await for 구문을 사용하여 스트림의 각 이벤트를 비동기적으로 처리합니다.
이 글에서는 Dart의 비동기 프로그래밍에 대해 알아보았습니다. Future를 사용한 비동기 작업 처리, async와 await를 사용한 비동기 함수 작성 및 호출, 그리고 Stream을 사용한 비동기 데이터 스트림 처리를 이해하고 활용하면 더 효율적이고 직관적인 비동기 코드를 작성할 수 있습니다. 다음 단계에서는 파일 입출력에 대해 학습해보세요. Happy Coding!
'프로그래밍 > Dart' 카테고리의 다른 글
[Dart] 9. Dart의 "라이브러리와 패키지" (0) | 2024.06.19 |
---|---|
[Dart] 8. Dart의 "파일 입출력" (0) | 2024.06.19 |
[Dart] 6. Dart의 "예외 처리" (0) | 2024.06.19 |
[Dart] 5. Dart의 "컬렉션" (0) | 2024.06.19 |
[Dart] 4. Dart의 "객체 지향 프로그래밍 (OOP)" (0) | 2024.06.19 |