안녕하세요 아이티 박사 HO입니다. flutter 면접 질문 #3 Stream에 대해서 알아보겠습니다.
Flutter에서 Stream은 비동기 이벤트의 시퀀스를 다루는 데 사용됩니다. Dart 언어의 일부로 제공되며, 데이터 조각이나 이벤트가 시간에 따라 하나씩 생성될 때 이를 처리하는 데 유용합니다. 예를 들어, 사용자의 입력, 파일 읽기, 네트워크 요청의 결과 등이 이에 해당될 수 있습니다.
Stream의 유형
Single subscription streams: 한 번에 하나의 리스너(subscriber)만 가질 수 있는 스트림입니다. 예를 들어, 파일의 내용을 읽는 스트림이 이에 해당됩니다. 이 스트림은 데이터를 요청하는 순서대로 데이터를 제공합니다.
Broadcast streams: 여러 리스너를 가질 수 있는 스트림입니다. 이벤트 브로드캐스트에 사용되며, 모든 리스너가 동시에 이벤트를 수신할 수 있습니다.
예시 코드
다음 예시에서는 Dart에서 Stream을 생성하고, 스트림에 이벤트를 추가한 다음, 이 이벤트를 구독하여 처리하는 방법을 보여줍니다. 이 예시는 간단한 카운트 다운 타이머를 구현합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import 'dart:async'; void main() { // StreamController를 생성합니다. final StreamController<int> controller = StreamController<int>(); // 스트림에 리스너를 추가합니다. 스트림에서 이벤트가 발생할 때마다 해당 데이터를 출력합니다. controller.stream.listen((data) { print('Received: $data'); }, onDone: () { print('Stream is closed'); }); // 스트림에 데이터를 추가합니다. Future.forEach<int>([3, 2, 1], (int number) { return Future.delayed(Duration(seconds: 1), () { controller.sink.add(number); }); }).then((_) => controller.close()); // 모든 데이터 처리가 끝나면 스트림을 닫습니다. // 스트림을 닫습니다. // controller.close(); } | cs |
0 Comments