공log/[Flutter]

[Flutter] 플러터 #05 - 스트림(stream)

ming_OoO 2022. 11. 25. 18:31
728x90

스트림(Stream)

  • 스트림은 데이터나 이벤트가 들어오는 통로
  • 스트림은 한번에 원하는 데이터를 받고 끝나는 것이 아니라 지속적으로 들어오는 데이터를 기다렸다가 받아야 할 때 사용되는 필수적인 방법
  • 스트림은 데이터를 만드는 곳과 소비하는 곳을 따로 둬서 환경에 상관없이 데이터를 받을 수 있다.

데이터 종류

데이터는 크게 즉시 사용가능 데이터와 기다려야 사용가능 데이터, 단일 데이터와 복수데이터로 나눌 수 있다.

정수형 데이터 예시 즉시 사용가능 기다려야 사용 가능
단일 데이터 int Future<int>
복수 데이터 List<int> Stream<int>

정수형 데이터를 예시로 표 작성)

단일 데이터 : 흔히 사용하는 String, int, double 등의 일반적인 데이터

Future<int> 데이터 : 이전 글에서 봤던 async 방식으로 사용하는 데이터이고 일단 전달이 되면 그 즉시 사용할 수 있는 데이터

List<int> : int형 데이터가 복수로 들어있는 데이터

Stream<int> : 우리가 List타입에 int 데이터가 도착하길 기다려야 한다면, 즉 Future<int> 타입의 복수버전이 바로 Stream<int>

 

Future vs Steram

비동기 프로그래밍은 Future 및 Stream으로 주로 처리

  • Future : 즉시 완료되지 않는 계산을 나타냄. 일반 함수가 결과를 반환하는 경우 비동기 함수는 Future를 반환하며 결과에 포함된다. 결과가 준비되면 Future에 알려준다.
  • 스트림은 일련의 비동기 이벤트. 요청 시 다음 이벤트를 받는 대신 스트림이 준비되면 이벤트가 있음을 알려주는 비동기 Iterable과 같다.

스트림(Stream) Example

플러터 앱에서 스트림을 사용하려면 StreamBuilder라는 위젯을 사용해야 한다.

StreamBuilder 스트림으로 전달되는 데이터, 이벤트를 구독할 있다. 그래서 매번 이벤트가 전달될 마다 새롭게 리빌드되면서 최신데이터가 반영된 결과를 보여준다. 

여기서는 스트림에 대한 이해를 위해 다트를 사용한 간단한 예시를 보여줄것이다.

 

 - 한 번만 listen할 수 있는 stream

- 여러 번 listen할 수 있는 stream

- 1초 간격으로 결과를 보여주는 stream

 

728x90