subindev 님의 블로그

[Flutter] #12 Dart 비동기 프로그래밍 본문

앱개발/Flutter

[Flutter] #12 Dart 비동기 프로그래밍

subindev 2025. 1. 21. 09:49

Dart 비동기 프로그래밍 정리

학습 목표

  1. Dart 비동기 프로그래밍의 개념 이해
  2. Future 타입에 대한 이해
  3. Future 타입과 Future.delayed 함수 사용 실습

1. Dart 비동기 프로그래밍이란?

동기성 (Synchronous)

  • 코드가 순차적으로 진행됩니다.
  • 이전 작업이 끝나야 다음 작업을 시작할 수 있습니다.
  • 예: 파일 읽기 작업 완료 후에야 다음 코드 실행.

비동기성 (Asynchronous)

  • 코드가 동시다발적으로 실행됩니다.
  • 작업 순서를 보장하지 않으며, 기다리는 동안 다른 작업을 수행합니다.
  • Dart는 Future 타입을 사용해 비동기 작업을 처리합니다.

2. Future 타입이란?

  • Future 객체: 미래에 값이나 오류를 반환할 것을 약속하는 데이터 타입입니다.
  • 비동기 작업을 쉽게 처리하기 위해 asyncawait 키워드를 사용합니다.
  • async: 함수가 비동기적으로 동작함을 컴파일러에 알립니다.
  • await: Future가 완료될 때까지 기다린 후 다음 코드를 실행합니다.

3. Future 사용 예제

시나리오 코드 1: 기본 Future 사용

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), // 3초 지연
    () {
      return '3초 동안 기다렸어!!!'; // 결과 반환
    },
  );
}
  • fetchData() 함수는 3초 후에 문자열을 반환합니다.
  • await를 사용해 동기적 방식으로 비동기 작업을 처리합니다.

시나리오 코드 2: Future와 await로 연산 처리

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; // 3초 후 결과 계산
  });
  print('addNumber1 연산 완료 : ${result}');
}
  • Future.delayed를 통해 지연 시간을 설정한 후 계산 결과를 출력합니다.

시나리오 코드 3: then()을 사용한 Future 처리

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()을 사용해 콜백 방식으로 결과를 처리합니다.
  • await 대신 then()으로 Future 완료 시점을 처리할 수 있습니다.

4. 정리

  • async/await: 비동기 코드를 동기적으로 작성할 수 있도록 해줍니다.
  • Future.delayed: 비동기 작업에 지연을 추가하는 함수입니다.
  • then(): 콜백 스타일로 Future 작업을 처리합니다