Dart는 비동기 프로그래밍을 지원하여 효율적인 데이터 처리를 가능하게 합니다.
비동기 프로그래밍을 잘 이해하면 네트워크 요청, 파일 읽기, 데이터베이스 작업 등 시간이 오래 걸리는 작업을 효율적으로 처리할 수 있습니다.
이번 블로그에서는 Dart의 비동기 프로그래밍 개념, 특히 async/await와 Future에 대해 심화 개념을 초보자도 쉽게 이해할 수 있도록 설명하겠습니다.
1. 비동기 프로그래밍이란?
비동기 프로그래밍은 프로그램이 특정 작업을 기다리지 않고 다른 작업을 동시에 처리할 수 있게 하는 프로그래밍 방식입니다.
비동기 프로그래밍을 사용하면 프로그램이 긴 작업을 기다리지 않고 다른 작업을 계속 진행할 수 있어, 더 빠르고 효율적인 코드 실행이 가능합니다.
2. Future란 무엇인가요?
Future는 Dart에서 비동기 작업의 결과를 나타내는 객체입니다. 미래에 완료될 작업을 표현하며, 작업이 완료되면 결과를 제공하거나 오류를 발생시킬 수 있습니다.
2.1 Future 생성하기
Future는 Future 클래스를 사용하여 생성합니다. 기본적인 Future 생성 방법은 다음과 같습니다.
Future<String> fetchData() {
return Future.delayed(Duration(seconds: 2), () => 'Data fetched');
}
- Future.delayed(): 지정된 시간 후에 결과를 반환하는 Future를 생성합니다.
- Duration(seconds: 2): 2초 후에 결과를 반환합니다.
- () => 'Data fetched': 2초 후에 반환될 결과입니다.
3. async와 await란 무엇인가요?
async와 await는 비동기 작업을 더 쉽게 다루기 위해 제공되는 키워드입니다. 이 두 키워드를 사용하면 비동기 작업을 동기적으로 작성할 수 있습니다.
3.1 async 키워드
async는 함수가 비동기 작업을 수행할 것임을 나타내는 키워드입니다. async가 붙은 함수는 항상 Future를 반환합니다.
Future<String> fetchData() async {
return 'Data fetched';
}
- async 키워드를 붙이면, 함수는 자동으로 Future를 반환합니다.
3.2 await 키워드
await는 비동기 작업의 결과를 기다리는 데 사용됩니다.
await는 async 함수 내에서만 사용할 수 있으며, Future가 완료될 때까지 기다립니다.
Future<void> printData() async {
String data = await fetchData();
print(data);
}
- await fetchData(): fetchData()가 완료될 때까지 기다립니다.
- print(data): fetchData()가 완료된 후 결과를 출력합니다.
4. 비동기 프로그래밍 예제
다음은 async/await와 Future를 사용하여 비동기 작업을 처리하는 예제입니다.
import 'dart:async';
Future<String> fetchData() {
return Future.delayed(Duration(seconds: 2), () => 'Data fetched');
}
Future<void> main() async {
print('Fetching data...');
String data = await fetchData();
print(data);
}
- fetchData()는 2초 후에 'Data fetched' 문자열을 반환합니다.
- await fetchData()는 fetchData()의 결과가 반환될 때까지 기다립니다.
- print(data)는 결과를 출력합니다.
5. 에러 처리하기
비동기 작업에서 에러를 처리하는 방법도 중요합니다. try/catch 블록을 사용하여 비동기 함수에서 발생하는 에러를 처리할 수 있습니다.
Future<void> main() async {
try {
String data = await fetchData();
print(data);
} catch (e) {
print('Error: $e');
}
}
- try: 비동기 작업을 시도합니다.
- catch: 에러가 발생하면 에러를 처리합니다.
6. 병렬 비동기 작업 처리하기
여러 비동기 작업을 동시에 실행할 때는 Future.wait()을 사용하여 모든 작업이 완료될 때까지 기다릴 수 있습니다.
Future<String> fetchData1() {
return Future.delayed(Duration(seconds: 2), () => 'Data 1');
}
Future<String> fetchData2() {
return Future.delayed(Duration(seconds: 3), () => 'Data 2');
}
Future<void> main() async {
List<String> results = await Future.wait([fetchData1(), fetchData2()]);
print(results); // [Data 1, Data 2]
}
- Future.wait(): 여러 Future 객체를 받아서 모든 작업이 완료될 때까지 기다립니다.
Dart에서 비동기 프로그래밍을 활용하면 시간이 오래 걸리는 작업을 효율적으로 처리할 수 있습니다.
Future와 async/await를 사용하면 비동기 작업을 더 간단하고 이해하기 쉽게 작성할 수 있습니다.
이 블로그가 Dart에서 비동기 프로그래밍을 이해하는 데 도움이 되었기를 바랍니다.
추가적인 질문이나 도움이 필요하시면 언제든지 말씀해 주세요!
구독!! 공감과 댓글은 저에게 큰 힘이 됩니다.
Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.
'Dart > Dart Server' 카테고리의 다른 글
[중급] Dart 서버 비동기 프로그래밍 심화/ Stream을 사용한 실시간 데이터 처리 및 이벤트 핸들링 (1) | 2024.09.11 |
---|---|
[중급] Dart 서버 비동기 프로그래밍 심화 / 비동기 API 호출 처리 및 병렬 작업 관리 (0) | 2024.09.11 |
[중급] Dart 서버 데이터베이스 연동/ 간단한 데이터 모델링 및 쿼리 작성 (1) | 2024.09.11 |
[중급] Dart 서버 데이터베이스 연동/ ORM(Object-Relational Mapping) 도구 사용법 (Aqueduct ORM 등) (0) | 2024.09.11 |
[중급] Dart 서버 데이터베이스 연동/ Dart와 관계형 데이터베이스 연결 (PostgreSQL, MySQL 등) (0) | 2024.09.11 |