시간이 걸리는 작업(API·파일·BLE)을 다루는 법. JS의 Promise/async와 거의 똑같다. (일반 개념)
"지금은 없지만 나중에 값이 올 것"을 나타낸다.
| Dart | JS |
|---|---|
Future<T> |
Promise<T> |
async / await |
async / await (동일) |
.then(...) |
.then(...) |
try/catch |
try/catch |
Future<User> fetchUser() async {
final res = await api.get(); // 기다림
return User.fromJson(res);
}
Future가 "단 한 번의 결과"라면, Stream은 "계속 흘러오는 값들"이다. BLE 응답, 이벤트, 실시간 구독에 쓴다.
| Future | Stream | |
|---|---|---|
| 값 개수 | 1번 | 여러 번 |
| JS 비유 | Promise | EventTarget / RxJS Observable |
| 구독 | await / then | .listen((v) {...}) |
stream.listen((value) { ... }); // 값이 올 때마다 실행
이 팀은 Repository는 Future를 반환하고, ViewModel은 CompositeSubscription으로 Stream을 관리하는 규칙이 있다(CLAUDE.md). 즉 계층마다 비동기 처리 방식이 정해져 있다.