비동기 프로그래밍: Future와 Stream

Michael Jang·2024년 2월 26일

dart

목록 보기
1/3

비동기 프로그래밍: Future와 Stream

Dart의 비동기 프로그래밍 모델은 FutureStream을 사용하여 구현됩니다. 이들은 Dart에서 비동기 연산을 처리하는 데 필수적인 구성 요소입니다. Future는 단일 비동기 연산을 나타내며, Stream은 연속적인 비동기 이벤트를 다룹니다.

Future

Future는 미래에 어떤 값이나 오류를 반환할 수 있는 비동기 연산을 나타냅니다. 일반적으로, 파일 읽기/쓰기, 네트워크 요청 등의 작업을 수행할 때 사용됩니다.

  • 기본 사용법
Future<String> fetchUserData() {
  // 비동기 연산을 흉내내는 Future
  return Future.delayed(Duration(seconds: 2), () => 'User data');
}

void main() {
  fetchUserData().then((data) {
    print(data); // 2초 후 'User data' 출력
  }).catchError((error) {
    print(error);
  });
}
  • async와 await

asyncawait 키워드를 사용하여 Future를 더 쉽게 다룰 수 있습니다. awaitFuture가 완료될 때까지 기다립니다.

Future<void> printUserData() async {
  var data = await fetchUserData();
  print(data); // 'User data' 출력
}

void main() {
  printUserData();
}

Stream

Stream은 시간이 지남에 따라 여러 개의 데이터 이벤트를 제공할 수 있는 비동기 연산의 연속입니다. 예를 들어, 사용자 입력, 파일에서의 데이터 스트림 읽기 등이 있습니다.

  • 기본 사용법
Stream<int> countStream(int max) {
  return Stream.periodic(Duration(seconds: 1), (x) => x + 1).take(max);
}

void main() {
  countStream(5).listen(
    (data) {
      print(data); // 1초 간격으로 1부터 5까지 출력
    },
    onDone: () {
      print('Done!');
    },
  );
}
  • Stream 사용의 장점

Stream을 사용하면 데이터의 흐름을 비동기적으로 처리할 수 있으며, 이벤트 기반 프로그래밍을 구현할 수 있습니다. 또한, 여러 데이터 소스로부터 발생하는 이벤트를 효율적으로 관리할 수 있습니다.

비동기 프로그래밍의 장점

  • 비차단: UI의 응답성을 유지하며, 서버 요청 같은 시간이 걸리는 작업을 백그라운드에서 실행할 수 있습니다.
  • 성능 향상: 여러 비동기 작업을 병렬로 수행함으로써 애플리케이션의 전체적인 처리 시간을 단축할 수 있습니다.

정리

Dart에서 FutureStream은 비동기 프로그래밍을 구현하는 핵심적인 요소입니다. Future는 단일 비동기 작업을 처리하는 반면, Stream은 연속적인 비동기 데이터 이벤트를 처리합니다. asyncawait 키워드를 사용하여 비동기 코드를 명확하고 직관적으로 작성할 수 있으며, 이를 통해 더 응답성 높고 효율적인 애플리케이션을 만들 수 있습니다.

profile
코딩하는_크리미와_치치

0개의 댓글