본문 바로가기
Flutter/Flutter FAQ

Flutter Dart에서 async와 async*의 차이점은 무엇인가요?, What's the difference between async and async* in Dart?

by 베타코드 2023. 5. 10.
반응형

질문


저는 플러터 프레임워크를 사용하여 애플리케이션을 만들고 있습니다. 이 과정에서 Dart의 asyncasync* 키워드를 만났습니다. 둘 사이에 차이가 무엇인지 알려주실 수 있는 분 계신가요?


답변


짧은 대답

  • asyncFuture를 반환합니다.
  • async*Stream을 반환합니다.

async

시간이 오래 걸릴 수 있는 작업을 수행하는 함수에 async 키워드를 추가합니다. 이는 결과를 Future로 감싸 반환합니다.

Future<int> doSomeLongTask() async {
  await Future.delayed(const Duration(seconds: 1));
  return 42;
}

Future를 기다려 결과를 얻을 수 있습니다:

main() async {
  int result = await doSomeLongTask();
  print(result); // 1초 후 '42' 출력
}

async*

여러 개의 Future 값을 반환하고 각각을 하나씩 전달하는 함수를 만들기 위해 async* 키워드를 추가합니다. 결과는 Stream으로 감싸집니다.

Stream<int> countForOneMinute() async* {
  for (int i = 1; i <= 60; i++) {
    await Future.delayed(const Duration(seconds: 1));
    yield i;
  }
}

이를 비동기 제너레이터 함수라고 합니다. 함수를 떠나지 않으므로 return 대신 yield를 사용하여 값을 반환합니다.

await for를 사용하여 Stream이 방출하는 각 값을 기다릴 수 있습니다.

main() async {
  await for (int i in countForOneMinute()) {
    print(i); // 1부터 60까지, 1초마다 하나씩 출력
  }
}

이어서

더 알아보려면 특히 제너레이터에 대한 이 비디오를 시청하세요:

반응형

댓글