Future란?
지금은 없지만 미래에 데이터가 담길 그릇.
import 'dart:async';
Future<int> futureNumber() {
// 3초 후 100이 상자에서 나옵니다
return Future<int>.delayed(Duration(seconds: 3), () {
return 100;
});
}
void main() {
// future 라는 변수에서 미래에(3초 후에) int가 나올 것입니다
Future<int> future = futureNumber();
future.then((val) {
// int가 나오면 해당 값을 출력
print('val: $val');
}).catchError((error) {
// error가 해당 에러를 출력
print('error: $error');
});
print('기다리는 중');
}
https://velog.io/@jintak0401/FlutterDart-%EC%97%90%EC%84%9C%EC%9D%98-Future-asyncawait
Flutter/Dart 에서의 Future, async/await
Flutter 와 Dart 를 공부하면서 깨달은 Future, async / await 에 대한 설명과 고민에 대한 답을 작성한 포스트입니다.
velog.io
위 코드는 위 블로그를 참고했다.
then 함수를 통해 미래에 값이 들어왔을 때 어떻게 행동할 것인지를 정의한다. then 내부에 함수가 들어있는데,
val에 값이 들어가서 100이 출력된다.
다음은 동기, 비동기에 대해 설명하겠다.
- 동기는 모든 동작을 차례대로 완료 후 수행하는 것.
- 비동기는 동작이 완료되지 않아도 다음 동작을 수행하는 것.
Future는 비동기를 위해 존재한다.
다음으로 에러코드를 살펴보겠다.
import 'dart:async';
Future<int> futureNumber() {
// 3초 후 Error!가 상자에서 나옵니다
return Future<int>.delayed(Duration(seconds: 3), () {
throw 'Error!';
});
}
void main() {
// future 라는 변수에서 미래에(3초 후에) error가 나올 것입니다
Future<int> future = futureNumber();
future.then((val) {
// int가 나오면 해당 값을 출력
print('val: $val');
}).catchError((error) {
// error가 해당 에러를 출력
print('error: $error');
});
print('기다리는 중');
}
Future<int> 상자에 int가 아닌 다른 값이 들어가면 error가 발생, catchError함수에 걸리게 된다.
따라서 위 코드는 error가 발생한다.
async, await란?
이 두 녀석 또한 비동기 처리를 위한 것이다.
일단 이 녀석들에게는 2가지 규칙이 존재한다.
1. await 키워드를 사용한 함수는 무조건 async 함수이어야 한다.
2. async 함수는 무조건 Future를 반환해야 한다.
1번 규칙은 그냥 함수를 정의할 때 async로 정의해주면 되는건데, 2번 규칙은 Future를 무조건 반환해야
한다는 점에서 좀 의아하다.
Future<ProcessedData> createDate() async {
final id = await _loadFromDisk();
final data = await _fetchNetworkData(id);
return ProcessedData(data);
}
async / await을 사용하면 위 같이 직관적으로 비동기를 다룰 수 있게 된다.
'개인 공부 > 플러터' 카테고리의 다른 글
State 란 무엇일까? (0) | 2024.05.18 |
---|---|
플러터 튜토리얼 (0) | 2024.04.25 |