StreamController란 무엇일까요?
StreamController는 Stream을 생성하고 관리하는 데 사용하는 클래스입니다. Stream에 직접 데이터를 추가하는 대신 StreamController를 사용하여 데이터를 추가하고 Stream을 구독하는 코드를 분리할 수 있습니다.
StreamController 예시
다음 코드는 StreamController를 사용하여 숫자를 1부터 5까지 출력하는 예시입니다.
void main() async {
final controller = StreamController<int>();
// Stream 구독
controller.stream.listen((number) {
print(number);
});
// Stream에 데이터 추가
for (int i = 1; i <= 5; i++) {
controller.add(i);
await Future.delayed(Duration(seconds: 1));
}
// Stream 종료
controller.close();
}
코드 설명:
- StreamController<int>: int 타입 데이터를 처리하는 StreamController를 생성합니다.
- listen: Stream을 구독하고 데이터가 도착할 때마다 callback 함수를 실행합니다.
- add: StreamController에 데이터를 추가합니다.
- close: Stream을 종료합니다.
StreamController의 장점
- Stream 생성 및 관리를 더 쉽게 만듭니다.
- 여러 컴포넌트 간에 데이터를 쉽게 공유할 수 있습니다.
- 백프레셔(backpressure)를 지원하여 데이터 흐름을 제어할 수 있습니다.
StreamController.sink란 무엇일까요?
StreamController.sink는 StreamController에 데이터를 추가하는 데 사용하는 속성입니다. add 메서드와 동일하게 작동하지만, sink는 더 직접적인 방식으로 데이터를 추가할 수 있습니다.
StreamController.sink 예시
다음 코드는 StreamController.sink를 사용하여 숫자를 1부터 5까지 출력하는 예시입니다.
void main() async {
final controller = StreamController<int>();
// Stream 구독
controller.stream.listen((number) {
print(number);
});
// StreamController.sink를 이용한 데이터 추가
final sink = controller.sink;
for (int i = 1; i <= 5; i++) {
sink.add(i);
await Future.delayed(Duration(seconds: 1));
}
// Stream 종료
controller.close();
}
코드 설명:
- sink: StreamController에 데이터를 추가하는 데 사용하는 속성입니다.
- add: sink 속성을 통해 데이터를 추가합니다.
| 기능 | StreamController.sink | add |
| 데이터 추가 방식 | 직접적 | 간접적 |
| 메서드 | sink.add(data) | controller.add(data) |
| 사용 편의성 | 간단 | 직관적 |
StreamController.sink는 add 메서드보다 직접적인 방식으로 데이터를 추가할 수 있지만, 덜 직관적입니다.
일반적인 상황에서는 add 메서드를 사용하는 것이 좋습니다.
고성능 데이터 처리, 실시간 데이터 시각화 등 성능이 중요한 상황에서는 StreamController.sink를 사용하는 것이 효율적일 수 있습니다.
StreamController.sink 활용 예시
- 고성능 데이터 처리
- 실시간 데이터 시각화
- 센서 데이터 처리
- 네트워크 응답 처리
'new' 카테고리의 다른 글
| Flutter에서 여러 곳에서 Stream을 Listening하는 방법: BroadcastStream 활용 (0) | 2024.03.18 |
|---|---|
| Flutter StreamBuilder를 활용한 간단한 타이머 만들기 (0) | 2024.03.18 |
| Dart Stream: 데이터 흐름을 쉽게 처리하는 방법 (0) | 2024.03.18 |
| CustomScrollView: 강력한 스크롤 효과 구현 (0) | 2024.03.11 |
| Flutter에서 SingleChildScrollView 사용하여 오버플로 문제 해결하기 (0) | 2024.03.11 |