일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 초기화
- 거리알고리즘
- 프로그래머스
- 플러터
- 자료구조
- 싱글톤
- Lazy
- 알고리즘
- 자바
- Java
- 에러
- Kotlin
- zwj
- flutter
- 완전탐색
- dart
- Singleton
- Widget Tree
- Render object tree
- 비동기 처리
- 프리즈드
- 코틀린
- linebreak
- dfs
- IOS
- 앱아이콘 변경
- 플러터 동작
- Android
- 재귀
- element tree
- Today
- Total
모바일 개발하는 자바리안의 메모장
Flutter(dart) - 비동기 프로그래밍 (Future) 본문
Flutter 의 비동기 로직 처리에 사용되는 대표 키워드 Future, await, async에 간략하게 정리해보려한다.
아래 코드는 dart.dev 에서 비동기 처리의 잘못된 예를 보여주기 위해 제공해 준 코드다 :
String createOrderMessage() {
var order = fetchUserOrder();
return 'Your order is: $order';
}
Future<String> fetchUserOrder() =>
Future.delayed(
const Duration(seconds: 2),
() => 'Large Latte',
);
void main() {
print(createOrderMessage());
}
우선 비동기 처리를 선언하는 Future 키워드를 살펴보자. 있다가 다 처리된 후 알려드릴게요~ 와 같은 느낌으로 키워드를 Future로 선택한 게 아닐까 조심스럽게 추측해본다..
그럼 다시 위 코드로 돌아와 어떤 문제가 있는지 다시 한 번 살펴보자. 위 코드의 결과값은 무엇일까? 코드를 봤을 때 상기 코드는 고객님이 커다란 라떼를 주문했단 걸 보여주려 하는 것 같지만 실제 결과값은 다음과 같다 :
왜 이런 결과가 나온지 댓글로 가장 먼저 정답을 맞추는 분께는 소정의 선물을 드릴 예정이며, 힌트는 'Thread'다.
Future에 대해 좀 더 자세히 알아보자.
Dart 팀이 정리해 둔 내용을 보면 future는 비동기 처리의 결과를 나타내며, uncompleted, completed 두 가지 상태를 갖는다 한다.
우선, uncompleted 상태는 Future가 호출되었을 때 future 인스턴스가 바로 반환이 되는데, 해당 인스턴스는 비동기 작업이 끝날때까지 기다리는 상태로 이 때 상태를 uncompleted 상태라고 한다.
그럼 completed 상태는 당연히 비동기 요청이 끝났을 때 상태인데, 별 탈 없이 모든 처리를 마치고 타입(Future<String> 의 경우 String값을 반환)에 맞는 값을 반환하거나 어떤 이유로 실패하여 에러가 발생했을 때의 상태를 의미한다.
Future 객체의 비동기 처리 결과의 성공, 실패에 대한 콜백은 아래와 같이 then, catchError 함수를 사용해주면 된다 :
fetchUserOrder()
.then((value) {
// 정상적으로 타입에 맞는 결과값을 받았을 경우
})
.catchError({
// 처리 과정에서 에러 발생했을 경우
});
'Flutter' 카테고리의 다른 글
Flutter - 앱 실행 시 발생하는 PlatformException 해결(flutter_secure_storage plugin) (0) | 2022.07.01 |
---|---|
Flutter - java.lang.UnsatisfiedLinkError, couldn't find "libflutter.so" 해결 (0) | 2022.06.23 |
Flutter - Container에 Decoration borderRadius 가 적용되지 않을 때 (ClipRRect) (0) | 2022.01.25 |
Flutter - 프로젝트 구조 (0) | 2022.01.01 |
Flutter - Dart Collection 스프레드 연산자(...) (0) | 2022.01.01 |