Dart는 비동기 프로그래밍을 지원하며, 이를 통해 프로그램의 흐름을 중단하지 않고 작업을 처리할 수 있습니다.
이번 포스팅에서는 Dart의 비동기 프로그래밍 개념과 Future 타입, 그리고 이를 활용한 실습 코드를 살펴보겠습니다.
💡 학습 목표
1. Dart 비동기 프로그래밍의 개념 이해하기
2. Future 타입 알아보기
3. Future.delayed 함수와 함께 Future 타입 활용해 보기
1. Dart 비동기 프로그래밍의 개념
동기 프로그래밍
- 모든 코드가 순차적으로 실행됩니다.
- 하나의 작업이 끝나야만 다음 작업이 실행됩니다.
- 예: 파일 읽기 작업이 끝난 뒤에야 다음 코드가 실행.
비동기 프로그래밍
- 코드가 동시다발적으로 실행됩니다.
- 작업의 실행 순서가 보장되지 않습니다.
- Dart 비동기 프로그래밍은 작업 완료를 기다리는 동안 다른 작업을 수행할 수 있도록 지원합니다.
Dart에서 비동기 프로그래밍을 위해 Future라는 데이터 타입을 사용합니다.
2. Future 타입이란?
Future란?
- Future는 "미래에 어떤 값 또는 오류를 반환하겠다는 약속"을 나타냅니다.
- async 함수 내부에서 await를 사용하여 Future가 완료될 때까지 실행을 잠시 멈추고 결과를 기다릴 수 있습니다.
Future와 관련된 주요 키워드
- async: 비동기 함수를 선언합니다.
- await: Future가 완료될 때까지 대기합니다.
- Future.delayed: 지정한 시간만큼 대기 후 작업을 수행합니다.
3. Future 타입 실습
예제 1: Future와 async/await 사용해 보기
import 'package:flutter/material.dart';
// async / await 는 비동기 처리를 마치 동기적 방식으로 코드를 만들어 준다.
void main() async {
print('tesk 1 ...................');
var data1 = await fetchData();
print('tesk 2 ...................');
print('tesk 3 ...................');
print('data1 확인 : ${data1}');
}
Future<String> fetchData() {
return Future.delayed(
Duration(seconds: 3),
() {
return '3초 동안 기다렸어... ';
},
);
}
- fetchData() 함수는 3초 후에 "3초 동안 기다렸어..."라는 문자열을 반환하는 Future를 반환합니다.
- await fetchData()는 3초 동안 대기하고, Future가 완료되면 데이터를 받아옵니다.
- 결과적으로 data1 변수에 데이터가 저장되고 출력됩니다.
예제 2: Future.delayed와 계산 처리
void main() async {
await addNumber1(10, 20);
print('메인 함수 완료');
}
// 1 단계
// Future 타입을 동기적 방식으로 소화하자.
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}');
// return result;
}
- addNumber1 함수는 두 숫자의 합을 계산하고, 결과를 출력하는 비동기 함수입니다.
- Future.delayed를 사용하여 계산 작업을 3초 후에 수행하도록 설정했습니다.
- 결과는 result에 저장된 뒤 출력됩니다.
예제 3: Future와 then 메서드 활용
void main() {
// 소화 1 방식 async / await 사용 방법
// 소화 2 방식 then
// 비동기 방식으로 콜백으로 이벤트 핸들러 처리를 한다.
addNumber2(10, 5).then((value) => print('결과값 출력 : ${value}'));
print('main() 함수 종료');
}
Future<int> addNumber2(int n1, int n2) {
return Future.delayed(Duration(seconds: 3), () => n1 + n2);
}
- addNumber2 함수는 두 숫자의 합을 계산하여 Future로 반환합니다.
- then 메서드를 사용하여 Future가 완료된 후 결과를 출력하도록 설정했습니다.
- main 함수는 즉시 종료 메시지를 출력하고, 3초 뒤 계산 결과가 출력됩니다.
Dart에서 비동기 프로그래밍은 프로그램의 효율성을 높이는 데 중요한 역할을 합니다.
Future와 async/await 키워드를 사용하면 복잡한 비동기 작업도 동기식 코드처럼 작성할 수 있다고 합니다.
💡 요약
Future는 비동기 작업의 결과를 나타냅니다.
async/await를 사용하여 비동기 작업을 동기식처럼 처리할 수 있습니다.
Future.delayed를 활용하면 특정 시간 후 작업을 실행할 수 있습니다.
'Flutter > Dart' 카테고리의 다른 글
[DART] dart의 추상 클래스 (1) | 2025.01.07 |
---|---|
[DART] OOP 연관관계와 Mixin (1) | 2025.01.07 |
[DART] 상속(Inheritance)이란 무엇인가요? (0) | 2025.01.06 |
[DART] Sound Null Safety in dart (0) | 2025.01.06 |
[DART] 클래스와 인스턴스 (2) | 2025.01.03 |