Dev-기타/Flutter

Future와 Stream

lafortune 2024. 9. 9. 15:02
반응형

Future

Future는 Dart에서 비동기 작업의 결과를 나타내는 클래스입니다. Future는 작업이 완료되었을 때 결과를 반환하거나 에러를 던집니다. Future를 사용하면 비동기 작업을 쉽게 처리할 수 있습니다.

async/await

async와 await 키워드는 비동기 작업을 쉽게 처리할 수 있도록 도와줍니다. async 키워드를 사용하면 함수를 비동기 함수로 만들 수 있습니다. 이 함수는 Future를 반환합니다. await 키워드는 Future가 완료될 때까지 기다린 후 결과를 얻을 수 있게 합니다.

import 'dart:async';

Future<String> fetchData() async {
  await Future.delayed(Duration(seconds: 3));
  return '데이터';
}

void main() async {
  print('데이터 요청');
  String data = await fetchData();
  print('받은 데이터: $data');
}

 

 

Stream

Stream은 시간에 따른 비동기 이벤트 시퀀스를 나타내는 클래스입니다. 이벤트는 데이터, 에러, 또는 스트림이 완료되었음을 나타낼 수 있습니다. Stream은 이벤트를 전달하는 방법을 제공하며, Stream을 구독하면 이벤트에 대한 알림을 받을 수 있습니다.

 

import 'dart:async';

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

void main() {
  print('스트림 시작');
  countStream(5).listen((int count) {
    print('받은 카운트: $count');
  }, onDone: () {
    print('스트림 완료');
  });
}

장단점 및 사용 상황

Future

장점: 단일 값의 비동기 작업을 쉽게 처리할 수 있습니다. 단점: 여러 개의 값을 처리하거나, 이벤트 기반의 작업에는 적합하지 않습니다.

사용 상황: API 호출, 파일 읽기/쓰기와 같은 한 번의 비동기 작업이 필요한 경우 사용합니다.

Stream

장점: 이벤트 기반의 작업이나, 여러 개의 값을 처리하는 데 적합합니다. 여러 구독자에게 이벤트를 전달할 수 있습니다.

단점: 단일 값의 비동기 작업에 비해 처리가 복잡할 수 있습니다.

사용 상황: 이벤트 기반의 작업(예: 소켓 통신), 여러 개의 값을 처리해야 하는 경우(예: 사용자 인터페이스의 상호작용)에 사용합니다.

 

 Flutter에서 비동기 작업을 처리할 때 Future와 Stream을 적절하게 활용하면 더 효율적인 코드를 작성할 수 있습니다. 작업의 성격과 요구사항에 따라 적절한 방법을 선택하여 사용하시면 좋습니다. 이를 통해 비동기 작업을 보다 간결하고 효과적으로 처리할 수 있게 됩니다.




반응형