본문 바로가기
new

StreamController를 이용한 데이터 관찰 예시

by ftbd 2024. 3. 18.

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 활용 예시

  • 고성능 데이터 처리
  • 실시간 데이터 시각화
  • 센서 데이터 처리
  • 네트워크 응답 처리