728x90
학습 목표
1. Dart 비동기 프로그래밍에 대한 개념을 이해하기
2. Future 타입에 대해 이해하고 사용하는 방법 익히기
3. Future.delayed 함수를 사용해 비동기 작업을 처리하기
Dart 비동기 처리와 콜백 함수 활용
Dart에서 비동기 프로그래밍은 프로그램이 다른 작업을 기다리지 않고 동시에 여러 작업을 처리할 수 있도록 도와주는 방식입니다. Future 타입을 사용하면 미래에 결과가 반환될 것이라는 약속을 나타낼 수 있습니다.
★ 키워드 묶음 ★
async / await / Future : 1회만 응답을 돌려 받는 경우
Future 타입이 뭘까?
Future 객체는 미래에 어떤 값이나 오류를 반환할 것이라는 약속을 나타냅니다. async 키워드가 붙은 함수 내부에서 await 키워드를 사용하면, Future가 완료될 때까지 실행을 잠시 멈추고 결과가 준비되면 다시 실행을 계속합니다
async/await 사용하기
void main() async {
print('task 1 ...........');
var data1 = await fetchData();
print('task 2 ...........');
print('task 3 ...........');
print('data1 확인 : ${data1}');
}
Future<String> fetchData() {
return Future.delayed(
Duration(seconds: 3),
() {
return '3초 동 기다렸어!!!';
},
);
}
- **async/await**는 비동기 코드를 동기적처럼 작성하게 해 줍니다.
- fetchData() 함수는 Future.delayed를 사용해 3초 후에 결과를 반환합니다.
- await를 사용하여 fetchData()가 끝날 때까지 기다린 후, 그 값을 출력합니다.
Future 사용해보기
void main() async {
await addNumber1(10, 20);
print('메인 함수 완료');
}
Future<void> addNumber1(int n1, int n2) async {
print('addNumber1 함수 시작 ');
var result = 0;
await Future.delayed(Duration(seconds: 3), () {
result = n1 + n2;
});
print('addNumber1 연산 완료 : ${result}');
}
- addNumber1 함수는 두 숫자를 더하는 비동기 함수입니다.
- await를 사용하여 3초의 지연 후에 계산을 완료합니다.
- 결과가 준비되면 setState로 화면을 업데이트하거나 다른 작업을 실행할 수 있습니다.
then을 이용한 비동기 처리
void main() {
addNumber2(10, 5).then((value) => print("결과값 출력 : ${value}"));
print('main() 함수 종료');
}
Future<int> addNumber2(int n1, int n2) {
return Future.delayed(Duration(seconds: 3), () => n1 + n2);
}
- **then**을 사용하면, Future가 완료된 후 결과값을 콜백 함수로 처리할 수 있습니다.
- addNumber2() 함수는 3초 후 결과값을 반환하고, 그 값을 then으로 처리합니다.
- then 방식은 콜백 방식으로 결과를 받아 처리하는 방식입니다.
이번 포스트에서는 Dart의 비동기 처리에서 중요한 개념인 **Future와 async/await**를 사용하여 비동기 작업을 처리하는 방법을 배웠습니다. 또한, then 방식으로 콜백을 사용하는 방법도 살펴보았습니다.
- **async/await**를 사용하면, 비동기 코드를 동기적처럼 작성할 수 있어 가독성이 높아집니다.
- then 방식은 콜백을 사용하여 결과를 처리합니다.
- Future.delayed를 활용하면, 시간 지연을 두고 비동기 작업을 처리할 수 있습니다.
이러한 비동기 프로그래밍 패턴은 시간이 걸리는 작업을 효율적으로 처리하고, UI 업데이트를 최적화하는 데 매우 유용합니다.
'Flutter > Dart 언어' 카테고리의 다른 글
[Flutter] 상태란 뭘까? (2) | 2025.01.20 |
---|---|
Dio 패키지 사용해 보기 (1) | 2025.01.14 |
Dart 비동기 처리와 콜백 함수 활용 (0) | 2025.01.14 |
Stack 위젯 테스트 코드 (2) | 2025.01.13 |
[Dart] dart의 추상 클래스 (0) | 2025.01.08 |