코드테스트 해보기
void main() {
final future = helloWord();
print(future);
}
Future<String> helloWord() {
// 3초 뒤에 Future<String>에서 "Hello World"가 나올거다
return Future.delayed(Duration(seconds: 3), () {
final hello = "Hello World";
print(hello);
return hello;
});
}
이 코드의 특징은 Future을 return 하는 함수를 호출하지만 await키워드를 사용 하지 않는 것이다. main 함수에서 Future<String>을 받아 future에 저장하고 출력한다.
결과
결과그림에 첫번째 줄인 Instance of 'Future<String>'은 main() 함수의 print(future)에서,
두번째 줄인 Hello World 는 helloWorld() 함수에서 출력된 것이다. 어째서 future의 출력순서가 첫 번째 일까????
1. 출력 순서가 첫 번째인 이유는 await 키워드를 사용하지 않았더라면 then() 함수를 사용 않았다는 것이다 즉 !!
비동기처리가 되기 때문에 3초가 되기전에 print(future)가 수행 되는 것이다.
2. 값이 Instance of 'Future<String>' 인유는 강조했다시피 Future로 반환 된 값은 상자가 열렸을 때 나오는 값으로 바뀌는 것이 아니기 때문이다. helloWorld() 함수의 return 타입은 Future<String>이므로 future의 타입은 String으로 바뀌는 것이 아닌 계속 Future<String> 이다.
'개발일지 > Dart' 카테고리의 다른 글
Future(비동기) - async , await 활용 - 2 (0) | 2022.11.10 |
---|---|
Future(비동기) - async , await 활용 - 1 (0) | 2022.11.10 |
Future(비동기) - 1 (0) | 2022.11.10 |
Laxical Scope (0) | 2022.11.09 |
클로저(Laxical Closure) (0) | 2022.11.09 |
댓글