반응형

Dart에서 비동기 프로그래밍은 효율적인 앱 개발을 위한 핵심 요소입니다. 특히 Flutter 앱에서 네트워크 요청이나 파일 작업 같은 시간이 걸리는 작업을 처리할 때 필수적인 개념입니다.
Future란?
Future는 미래의 어느 시점에 완료될 작업의 결과를 나타내는 객체입니다. 키오스크에서 음식을 주문하고 주문번호를 받은 후 기다리는 것과 유사합니다.
import 'dart:async';
Future<int> futureNumber() {
// 3초 후 100이 반환됩니다
return Future<int>.delayed(Duration(seconds: 3), () {
return 100;
});
}
void main() {
Future<int> future = futureNumber();
future.then((val) {
print('val: $val');
}).catchError((error) {
print('error: $error');
});
print('기다리는 중');
}
실행 결과:
기다리는 중
val: 100
async와 await
async/await는 Future를 더 직관적으로 다루기 위한 키워드입니다.
중요한 규칙
- await 키워드를 사용하려면 함수에 async를 붙여야 합니다.
- async 함수는 항상 Future를 반환합니다.
- await는 비동기 처리가 완료될 때까지 함수의 실행을 일시 중지합니다.
잘못된 예제
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());
}
출력 결과:
Your order is: Instance of '_Future<String>'
올바른 예제
Future<String> createOrderMessage() async {
var order = await fetchUserOrder();
return 'Your order is: $order';
}
Future<String> fetchUserOrder() =>
Future.delayed(
const Duration(seconds: 2),
() => 'Large Latte',
);
Future<void> main() async {
print('Fetching user order...');
print(await createOrderMessage());
}
출력 결과:
Fetching user order...
Your order is: Large Latte
await의 동작 방식
await 키워드는 비동기 처리가 완료될 때까지 해당 함수의 실행을 멈춥니다. 이는 비동기 코드를 마치 동기 코드처럼 작성할 수 있게 해 줍니다.
Future<ProcessedData> createData() async {
final id = await _loadFromDisk();
final data = await _fetchNetworkData(id);
return ProcessedData(data);
}
위 코드에서:
- _loadFromDisk()가 완료될 때까지 기다립니다.
- 완료되면 그 결과를 id에 저장합니다.
- _fetchNetworkData(id)가 완료될 때까지 기다립니다.
- 최종 결과를 반환합니다.
비동기 프로그래밍의 장점
- UI 응답성 향상: 시간이 오래 걸리는 작업을 처리하는 동안에도 UI가 멈추지 않습니다.
- 효율적인 리소스 사용: 작업이 완료되기를 기다리는 동안 다른 작업을 수행할 수 있습니다.
- 코드 가독성: async/await를 사용하면 비동기 코드를 동기 코드처럼 작성할 수 있어 가독성이 향상됩니다.
주의사항
- await는 반드시 async 함수 내에서만 사용할 수 있습니다.
- async 함수는 항상 Future를 반환해야 합니다.
- 비동기 작업의 결과를 사용하려면 await를 사용하거나 then() 메서드를 활용해야 합니다.
Dart의 비동기 프로그래밍은 Flutter 앱 개발에서 필수적인 요소이며, 이를 통해 사용자 경험을 크게 향상할 수 있습니다.
[Dart] 다트 비동기 프로그래밍
Dart는 동기 및 비동기 프로그래밍을 지원하여, 효율적인 코드 실행과 사용자 경험을 개선하는 데 도움을 ...
blog.naver.com
다트(Dart)의 객체지향 프로그래밍(OOP) 개념
클래스와 객체클래스는 객체를 생성하기 위한 청사진입니다. Dart에서 클래스를 정의하고 사용하는 방법은 다음과 같습니다:class Person { String name; int age; Person(this.name, this.age); void introduce() { print(
hoosfa.tistory.com
반응형
'IT기술 > 다트 (dart)' 카테고리의 다른 글
| 다트(Dart)의 객체지향 프로그래밍(OOP) 개념 (0) | 2025.03.23 |
|---|---|
| [Dart 완전 정복] 다트 함수와 람다, 예외처리 마스터하기 (0) | 2025.03.21 |
| [Dart 완전 정복] 다트 연산자와 제어문 마스터하기 (0) | 2025.03.21 |
| [Dart 완전 정복] 다트 컬렉션(Collection) 마스터하기: List, Map, Set, Enum 총정리 (2) | 2025.03.20 |
| [Dart 완전 정복] 다트 프로그래밍 언어의 핵심 개념과 기초 문법 총정리 (0) | 2025.03.19 |