[Flutter] Stream과 Broadcast Stream

티라노·2025년 1월 17일
0

Today I Learned

목록 보기
37/38

저번에 플러터에서 Future와 Stream의 차이점이 이 무엇인지 알아본 적 있다. 그 때는 Stream이 Single-subscriptionBroadcast 로 두 가지 종류가 있다고 설명했었는데, 용어 설명이 정돈되지 않았던 것 같아서 다시 정리하려고 이번 주제를 선택했다.

Stream

다시 한 번 정리하자면 Stream은 여러 비동기적 이벤트가 발생할 때 해당 데이터를 지속적으로 받아오기 위한 기능이다.

우선 Stream은 아래처럼 선언할 수 있다.

// 예시

Stream.periodic(Duration(seconds: 1), (){...});

지난 시간에는 Stream에 *async를 붙여야 Single subscription으로 선언할 수 있다고 설명했었는데, 꼭 그렇게 하지 않아도 된다. Stream은 무슨 처리를 하지 않아도 기본적으로 리스너를 하나만 두는 상태인 것 같다.

Broadcast 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) => ... );
  • add : 컨트롤러에 데이터를 전송하는 함수
  • Broadcast Stream은 onPause를 지원하지 않는다. 이유를 추측해보자면 onPause는 컨트롤러의 메서드인데, Broadcast의 경우 단일 리스너에게 영향을 받지 않기 때문인 것 같다.

차이점 정리

  1. controller 유무
  2. Stream은 단일 리스너, Broadcast Stream은 복수 리스너를 지원한다.
  3. Stream은 동작이 리스너 상태에 종속되지만 Broadcast Stream은 리스너 상태에 관계 없이 작동 중이다.
  4. 사용 가능한 함수의 종류가 다르다.

0개의 댓글

관련 채용 정보