-
flutter async 함수 안에서는 await를 여러 번 사용할 수 있을까?프로그래밍/flutter로 앱만들기 2025. 4. 22. 13:11반응형
Dart나 Flutter를 처음 접하면 가장 먼저 눈에 띄는 키워드 중 하나가 async와 await이다.
dart 비동기 구조 그리고 문득 이런 의문이 생긴다.
"async 붙인 함수 안에서 await는 한 번만 써야 하는 거 아니야?"
사실은 그렇지 않다. 결론부터 말하면, async 함수 내부에서는 await를 여러 번 사용하는 게 가능하고, 오히려 그렇게 사용하는 게 자연스럽다.비동기 처리는 외부에서 시간이 오래 걸리는 작업이 있을 때 자주 쓰게 된다. 예를 들어, 서버에서 데이터를 받아오거나, 파일을 업로드하거나, DB에 정보를 저장하는 등 Flutter에서 UI를 멈추지 않게 하려면 이 모든 작업을 비동기로 처리해야 한다. 이때 await 키워드를 통해 결과가 올 때까지 기다리고, 그 이후 로직을 작성하는 흐름이 일반적이다.
예를 들어보자.
Future<void> uploadUserProfile() async { final imageUrl = await uploadImage(); final userId = await getCurrentUserId(); await saveUserProfile(userId, imageUrl); }
이 함수는 순서대로 세 가지 작업을 처리한다. 이미지 업로드, 사용자 ID 조회, 프로필 저장이다. 각각이 비동기 함수이고, await 키워드를 통해 완료를 기다린 뒤에야 다음 작업으로 넘어간다. 여기서 중요한 점은 한 번의 await로 끝나는 게 아니라, 필요한 만큼 await를 여러 번 사용하고 있다는 것이다.
Dart의 async는 내부에서 await를 하나만 사용하라고 제한하지 않는다. 오히려 필요한 만큼 await를 적절히 배치해서 안정적인 흐름을 유지하도록 설계되어 있다.
또 한 가지 알아둘 것은, 비동기 작업이 서로 의존하지 않는 경우에는 순차적으로 처리할 필요 없이 병렬로 처리하는 것도 가능하다는 점이다. 이럴 땐 Future.wait를 활용할 수 있다.
final results = await Future.wait([ loadImage(), fetchUserInfo(), readLocalFile(), ]);
이 코드는 세 개의 작업을 동시에 실행하고, 모든 결과가 올 때까지 기다린다. 각 작업이 서로 영향을 주지 않을 경우에는 훨씬 효율적이다.
정리하자면, async 함수 안에서는 await를 한 번만 쓰는 게 아니라 필요한 만큼 여러 번 사용할 수 있고, 사용 순서나 방식에 따라 흐름을 유연하게 제어할 수 있다. Flutter에서 자연스럽고 안정적인 비동기 흐름을 구성하기 위해서는 이 구조에 익숙해지는 것이 중요하다.
728x90반응형'프로그래밍 > flutter로 앱만들기' 카테고리의 다른 글
[Flutter] iOS에서 마이크 권한 팝업이 안 뜨는 이유와 해결 방법 (0) 2025.05.15 Firebase 테스트 환경을 만들 때, 꼭 알아야 할 '로컬(mock) 환경' 이야기 (0) 2025.04.28 Flutter는 왜 UI를 단 하나의 스레드에서만 그릴까? (0) 2025.04.22 안드로이드 스튜디오에서 flutter 데모 실행하기 (0) 2024.06.02 flutter 윈도우 개발 환경 세팅 (0) 2024.05.26