Flutter/2.0

Dart에서 Future와 async/await 이해하기

lgvv 2021. 8. 23. 12:40

Dart에서 Future와 async/await 이해하기

 

1. Dart의 Thread

  • Dart는 싱글 쓰레드 기반
  • Event loop를 통해 비동기 작업 처리
  • Android의 Looper와 유사한 개념

 

2. Future란?

  • Future는 미래의 값을 나타내는 객체
  • 실행 순서:
    1. Dart가 Future 객체를 내부 배열에 등록
    2. 관련 코드가 이벤트 큐에 등록
    3. 불완전한 Future 객체 반환
    4. 동기(Synchronous) 코드 먼저 실행
    5. Future 완료 시 실제 데이터 전달

 

future와 then에 대한 코드

예제: Future + then

Future 실행은 비동기, then으로 결과 처리

Future<String> fetchData() {
  return Future.delayed(Duration(seconds: 2), () => "데이터 완료");
}

void main() {
  print('요청 시작');
  
  fetchData().then((data) {
    print(data);
  });

  print('다음 코드 실행');
}

 

출력 결과

요청 시작
다음 코드 실행
데이터 완료

 

 

3. Async Method

  • async가 붙은 메소드는 Future 반환
  • await 키워드 등장 시 해당 Future 완료까지 대기
  • 완료 후 다음 코드 실행
  • await 동기(Sync)처럼 동작하지만, 실제로는 백그라운드에서 처리.
Future<String> fetchData() async {
  await Future.delayed(Duration(seconds: 2));
  return "데이터 처리 완료";
}

void main() async {
  print('요청 시작');

  String result = await fetchData();
  print(result);

  print('다음 코드 실행');
}

 

출력 결과

요청 시작
데이터 처리 완료
다음 코드 실행

 

 

async에 대한 결과

 

 

정리

  1. Future: 나중에 완료될 비동기 작업
  2. then: Future 완료 시 실행할 코드
  3. async/await: Future를 동기 코드처럼 작성 가능
  4. Event loop 덕분에 싱글 쓰레드에서도 비동기 처리 가능