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
'공log > [Flutter]' 카테고리의 다른 글
[Flutter] 플러터 #07 - 버튼 (0) | 2022.11.27 |
---|---|
[Flutter] 플러터 #06 - 이미지와 폰트 (0) | 2022.11.25 |
[Flutter] 플러터 #04 - 비동기 처리 (0) | 2022.11.24 |
[Flutter] 플러터 #03 - 생명주기 (0) | 2022.11.24 |
[Flutter] 플러터 #02 - 구조 (0) | 2022.11.24 |