플러터 앱 개발

Chapter 16. 비동기 프로그래밍과 Dart

yuna 2026. 2. 3. 20:28

안녕하세요!

오늘은 다트 문법의 마지막 시간입니다..

 

이제 하산해도 되는 건가???라고 생각하셨다면 오산입니다

음하하

 

오늘은 비동기 프로그래밍 준비했습니다!

사실 저도 아직 너무 헷갈리는 개념이라 

정리하면서 다시 복습 해볼 생각입니다!ㅎㅎ


1. 동기 프로그래밍

작업이 완료될 때까지 기다렸다가 결과가 나오면 값을 반환!

 

  • 단점: 결과값이 나올 때까지 다른 모든 연산이 멈추기 때문에 다른 작업을 할 수 없다.
    • 시간이 오래 걸리는 작업인 경우 매우 비효율적!
    • 파일로부터 데이터를 읽을 때
    • 데이터 베이스에 데이터를 쓸 때
    • 네트워크를 통해 데이터를 불러올 때

-> 동기 프로그래밍의 비효율을 해결하기 위해 나온 것이 비동기 프로그래밍이다!

 

2. 비동기 프로그래밍

  • 작업이 완료될 때까지 기다리지 않고, 미래의 특정 시점에 값을 반환
  • 결과값이 나올 때까지 멈춰 있지 않고, 수행할 수 있는 다른 작업을 찾아서 수행
  • 시간이 오래 걸리는 작업을 처리할 때 사용!
  • Dart SDK 표준 라이브러리 중에서 dart:async에 있는 Future랑 Stream 클래스를 사용해서 구현

 

Future

  • 비동기 프로그래밍에서 사용되는 대표적인 클래스
  • dart:async에 포함되어 있어서 따로 import 하지 않아도 된다!
  • 작업이 성공적으로 완료되었을 때 해당 결과값을 반환하고, 실행을 종료
  • 결과값의 타입은 Future이다!
  • Future는 아직 값이 없으면 대신 언젠가 결과가 도착할 야속만 있는 제네릭 클래스이다.
  • 하나의 작업에 대해 값이나 이벤트가 한 번 발생하는 단일 비동기 작업에 사용

 

delayed( ) 메서드

  • Future.delayed(Duration(seconds: [지연 시간]));
Future<void> main() async {
  print("시작");

  await Future.delayed(Duration(seconds: 2));

  print("2초 후 실행");
}

 

 

  • Future.delayed(Duration(seconds: [지연 시간]), () {[지연 시간 후의 동작]});
Future<void> main() async {
  print("시작");

  var result = await Future.delayed(
    Duration(seconds: 2),
    () {
      return "완료!";
    },
  );

  print(result);
}

 

Future의 한계

하나의 작업당 결과값을 한 번만 받을 수 있음

-> 이러한 한계를 극복하기 위해 Stream을 사용

 

Stream

  • 비동기 프로그래밍에서 사용되는 대표적인 클래스
  • Dart SDK 표준 라이브러리 인 dart:async에 포함되어 있는 클래스
  • 시간에 따라 연속적인 데이터 흐름을 제공
  • 한 번에 하나의 값이 아닌 여러 값을 비동기적으로 받을 수 있음
  • 결과값을 한 번 반환하고 나면 실행이 종료되는 Future와 다르게 직접 실행을 종류해 주어야 실행이 종료되고,
    실행을 종료해 주지 않으면 계속 실행

사용하는 경우

  • 하나의 작업에 대해 값이나 이벤트가 여러 번 발생하는 경우에 사용
  • 비동기 연산의 결과값이 여러 번 반환되는 경우 그 값을 순차적으로 받기 위해 사용
  • yield: 값을 방출하도록 하는 키워드 / return과 같은 개념
  • listen( ): 방출되는 소리를 듣고 있다는 뜻의 메서드