다트 기초 문법 - 21일차 / StreamController
- Dart의 StreamController는
dart:async 임포트와 함께 이벤트를 보내고 받을 수 있는 구독 시스템을 생성합니다. 📨
StreamController<T>처럼 제네릭 타입을 지정하여 특정 자료형의 이벤트만 처리하거나, dynamic으로 유연하게 사용할 수 있습니다. 🏷️
controller.add()로 데이터를 보내고, controller.stream.listen()을 통해 스트림을 구독하여 onData, onDone, onError 콜백으로 이벤트를 처리합니다. 👂
- 기본적으로 에러 발생 시 스트림이 종료되지 않지만,
listen() 메서드의 cancelOnError: true 옵션을 설정하여 에러 발생 시 스트림을 종료할 수 있습니다. 🛑
controller.hasListener를 사용하여 현재 스트림에 활성 리스너가 있는지 확인할 수 있습니다. 🚦
- 기본
StreamController는 단일 구독만 허용하며, 여러 리스너가 필요한 경우 StreamController.broadcast() 생성자를 사용해야 합니다. 👯
controller.addStream() 메서드를 사용하여 다른 스트림(예: 지연 함수)의 이벤트를 현재 컨트롤러의 스트림으로 통합할 수 있습니다. 🔗
controller.close()를 호출하여 스트림을 명시적으로 종료할 수 있으며, 이후에는 더 이상 이벤트가 전송되지 않고 onDone이 호출됩니다. 🔚
- Flutter의 Bloc 라이브러리와 같은 아키텍처 패턴에서 이벤트 파이프라인 및 상태 관리를 위해
StreamController가 핵심적으로 사용됩니다. 🏗️
- Stream, Future, Completer와 함께
StreamController는 Dart/Flutter 비동기 및 이벤트 처리의 핵심 요소이므로 깊은 이해가 중요합니다. 🧠
데브허브 | DEVHUB | 다트 기초 문법 - 21일차 / StreamController