Future
Future는 Dart에서 비동기 작업의 결과를 나타내는 클래스입니다. Future는 작업이 완료되었을 때 결과를 반환하거나 에러를 던집니다. Future를 사용하면 비동기 작업을 쉽게 처리할 수 있습니다.
async/await
async와 await 키워드는 비동기 작업을 쉽게 처리할 수 있도록 도와줍니다. async 키워드를 사용하면 함수를 비동기 함수로 만들 수 있습니다. 이 함수는 Future를 반환합니다. await 키워드는 Future가 완료될 때까지 기다린 후 결과를 얻을 수 있게 합니다.
import 'dart:async';
Future<String> fetchData() async {
await Future.delayed(Duration(seconds: 3));
return '데이터';
}
void main() async {
print('데이터 요청');
String data = await fetchData();
print('받은 데이터: $data');
}
Stream
Stream은 시간에 따른 비동기 이벤트 시퀀스를 나타내는 클래스입니다. 이벤트는 데이터, 에러, 또는 스트림이 완료되었음을 나타낼 수 있습니다. Stream은 이벤트를 전달하는 방법을 제공하며, Stream을 구독하면 이벤트에 대한 알림을 받을 수 있습니다.
import 'dart:async';
Stream<int> countStream(int to) async* {
for (int i = 1; i <= to; i++) {
await Future.delayed(Duration(seconds: 1));
yield i;
}
}
void main() {
print('스트림 시작');
countStream(5).listen((int count) {
print('받은 카운트: $count');
}, onDone: () {
print('스트림 완료');
});
}
장단점 및 사용 상황
Future
장점: 단일 값의 비동기 작업을 쉽게 처리할 수 있습니다. 단점: 여러 개의 값을 처리하거나, 이벤트 기반의 작업에는 적합하지 않습니다.
사용 상황: API 호출, 파일 읽기/쓰기와 같은 한 번의 비동기 작업이 필요한 경우 사용합니다.
Stream
장점: 이벤트 기반의 작업이나, 여러 개의 값을 처리하는 데 적합합니다. 여러 구독자에게 이벤트를 전달할 수 있습니다.
단점: 단일 값의 비동기 작업에 비해 처리가 복잡할 수 있습니다.
사용 상황: 이벤트 기반의 작업(예: 소켓 통신), 여러 개의 값을 처리해야 하는 경우(예: 사용자 인터페이스의 상호작용)에 사용합니다.
Flutter에서 비동기 작업을 처리할 때 Future와 Stream을 적절하게 활용하면 더 효율적인 코드를 작성할 수 있습니다. 작업의 성격과 요구사항에 따라 적절한 방법을 선택하여 사용하시면 좋습니다. 이를 통해 비동기 작업을 보다 간결하고 효과적으로 처리할 수 있게 됩니다.
'Dev-기타 > Flutter' 카테고리의 다른 글
Mixin 사용하기 (1) | 2024.09.09 |
---|---|
[이슈해결] fvm 설치 후 flutter - 안드로이드 빌드 실패 (0) | 2023.09.28 |
Flutter 버전 업데이트 시 pub-cache 에러 발생 시 (0) | 2023.07.04 |