drexqq

[Flutter] 플러터 Future, Stream 본문

Mobile/Flutter

[Flutter] 플러터 Future, Stream

drexqq 2022. 11. 16. 17:28
728x90
반응형

Flutter에서 주로 사용되는 비동기통신인 Future와 Stream에 대해서 작성을 해보겠습니다.

 

비동기 프로그래밍이란

  • - 파일읽기, DB I/O, 네트워크 데이터 가져오기 등 시간이 오래 걸리는 작업을 수행할 때 사용하는 방법입니다
  • - 비동기 작업을 통해 다른 작업이 완료되기를 기다리는 동안 프로그램이 작업을 완료할 수 있습니다.
  • - 플러터에서의 비동기 프로그래밍은 일반적으로 결과를 Future로 제공하거나 결과에 여러 부분이 있는 경우 Stream으로 제공합니다.
    • Future은 일회성 응답 (ex: 파일 하나 읽기, http requrest etc..)
    • Stream은 여러번의 응답 (ex: 계속해서 변하는 데이터)
    • 동기 작업: 동기 작업은 완료될 때까지 다른 작업의 실행을 차단합니다.
    • 동기 함수: 동기 함수는 동기 작업만 수행합니다.
    • 비동기 작업: 비동기 작업이 시작되면 완료되기 전에 다른 작업을 실행할 수 있습니다.
    • 비동기 함수: 비동기 함수는 하나 이상의 비동기 작업을 수행하며 동기 작업도 수행할 수 있습니다.

 

Future

  • 즉시 완료되지 않는 계산을 나타냅니다. 일반 함수가 결과를 반환하는 경우 비동기 함수는 결국 결과를 포함하게 될 Future를 반환합니다.
  • future는 Future의 instance이며 비동기작업의 결과값을 나타내며 완료 / 완료되지 않음 두 가지의 상태를 가집니다.
    • 완료 상태에서는 성공시에는 결과값을 실패시에는 에러를  가집니다.
      Future<String>의 결과값은 성공시 String, 실패시 error입니다.
    • async: 함수 본문 앞에 async 키워드를 사용하여 비동기로 표시할 수 있습니다.
    • async 함수: async 함수는 async 키워드로 레이블이 지정된 함수입니다.
    • await: await 키워드를 사용하여 비동기 식의 완료된 결과를 가져올 수 있습니다. await 키워드는 async 함수 내에서만 작동합니다.
  • 에러 핸들링
    • try - catch문을 사용합니다.

 

Stream

  • 요청할 때 다음 이벤트를 가져오는 대신 스트림이 준비되었을 때 이벤트가 있음을 알려줍니다.
  • 스트림은 데이터의 비동기 시퀀스를 제공합니다.
  • 데이터 시퀀스에는 사용자가 생성한 이벤트와 파일에서 읽은 데이터가 포함됩니다.
  • Stream API에서 await for 또는 listen()을 사용하여 스트림을 처리할 수 있습니다.
  • 스트림에는 단일 구독 또는 브로드캐스트의 두 가지 종류가 있습니다.

단일 구독 스트림(Single subscription stream)

  • 이벤트는 올바른 순서로 누락 없이 전달되어야 합니다.
  • 파일을 읽거나 웹 요청을 수신할 때 받는 스트림의 종류입니다.
  • 이러한 스트림은 한 번만 들을 수 있습니다.
  • 나중에 다시 듣는 것은 초기 이벤트를 놓치는 것을 의미할 수 있으며 스트림의 나머지 부분은 의미가 없습니다.
  • 청취를 시작하면 데이터를 가져와 청크로 제공합니다.

브로드캐스트 스트림(Broadcast Stream)

  • 언제든지 이러한 스트림을 듣기 시작할 수 있으며 듣는 동안 발생하는 이벤트를 받습니다.
  • 둘 이상의 청취자가 동시에 청취할 수 있으며, 이전 구독을 취소한 후 나중에 다시 청취할 수 있습니다.

 

https://dart.dev/codelabs/async-await

 

Asynchronous programming: futures, async, await

Learn about and practice writing asynchronous code in DartPad!

dart.dev

728x90
반응형
Comments