Flutter
[Flutter] Dart 비동기 프로그래밍 - 1
ekkkang
2025. 1. 14. 10:57
더보기
💡 학습 목표
1. dart 비동기 프로그래밍에 대한 개념을 이해하자.
2. Future 타입에 이해
3. Futrue 타입과 Future.delayed 함수 사용해 보기
1. dart 비동기 프로그래밍에 대한 개념을 이해하자.
동기성 - 모든 코드가 순차적으로 진행되는 형태, 재 작업이 끝날 때까지 프로그램은 다음 작업을 시작하지 않습니다. 예를 들어, 파일 읽기 작업이 끝나야만 다음 줄의 코드가 실행됩니다.
비동기 - 코드가 동시다발적으로 실행, 순착적으로 보장을 할 수 없는 형태
dart 비동기 프로그래밍은 프로그램의 흐름을 중단시키지 않고, 무언가의 완료를 기다리는 동안 다른 작업을 수행할 수 있게 해줍니다. Dart에서는 이를 위해 Future라는 데이터 타입을 제공 합니다.
// 키워드 묶음
// async / await / Future : 1회만 응답을 돌려 받는 경우
Future 타입이 뭘까?
Future 객체는 미래에 어떤 값이나 오류를 반환할 것이라는 약속을 나타냅니다. async 키워드가 붙은 함수 내부에서 await 키워드를 사용하면, Future가 완료될 때까지 실행을 잠시 멈추고 결과가 준비되면 다시 실행을 계속합니다
시나리오 코드 1 - Future 타입 사용해보기
// async / await 는 비동기 처리를 마치 동기적 방식으로 코드를 만들어 준다.
void main() async {
// 비동기 프로그래밍 테스트 코드
// 동기성 - 모든 코드가 순차적으로 진행되는 형태
// 비동기성 - 코드가 동시 다발적으로 실행, 순차적 실행을 보장 할 수 없다.
// 키워드 묶음
// async / await --> Future : 1회만 응답을 돌려 받는 경우 사용한다.
// 규칙 - 함수 내부에서 await 키워드를 가지고 있다면 그 함수를 감싸는 블록은
// 무조건 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초동 기다렸어!!!';
},
);
}
시나리오 코드 2 - Future 타입 사용해보기
void main() async {
await addNumber1(10, 20);
print('메인 함수 완료');
}
// 1 단계
// Future 타입을 동기적 방식으로 소화하자. 1
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;
}
시나리오 코드 3 - Future 타입 사용해보기
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);
}