저번에 플러터에서 Future와 Stream의 차이점이 이 무엇인지 알아본 적 있다. 그 때는 Stream이 Single-subscription
과 Broadcast
로 두 가지 종류가 있다고 설명했었는데, 용어 설명이 정돈되지 않았던 것 같아서 다시 정리하려고 이번 주제를 선택했다.
다시 한 번 정리하자면 Stream은 여러 비동기적 이벤트가 발생할 때 해당 데이터를 지속적으로 받아오기 위한 기능이다.
우선 Stream은 아래처럼 선언할 수 있다.
// 예시
Stream.periodic(Duration(seconds: 1), (){...});
지난 시간에는 Stream에 *async를 붙여야 Single subscription으로 선언할 수 있다고 설명했었는데, 꼭 그렇게 하지 않아도 된다. Stream은 무슨 처리를 하지 않아도 기본적으로 리스너를 하나만 두는 상태인 것 같다.
container를 broadcast로 선언하는 방식에 대해서 좀 더 자세히 알아보자.
// 1. controller 선언
StreamController<Object> controller =
StreamController<Object>.broadcast();
// 2. Stream 선언
Stream _objectStream =
Stream.periodic(Duration, (){
return controller.add();
});
// 3. subscribe
controller.stream.listen((onValue) => ... );