Mobile/Dart

[Dart] Stream 뽀개기

펭귄알 2024. 7. 31. 09:40

이번 글에서는 Dart의 Stream에 대해 알아보겠습니다.

우선 Stream을 다루기 전에 비동기 프로그래밍에 대해 간단히 소개하고 넘어가겠습니다.

비동기 프로그래밍

특정 작업이 완료될 때까지 프로그램의 실행을 중지하지 않고 다른 작업을 계속 진행할 수 있도록 하는 프로그래밍 패러다임

 

아래 예시를 통해 예시를 들어보겠습니다.

비동기 프로그래밍 예시

기존에는 First, Second, Third 이렇게 3가지가 순서대로 출력되어야 합니다.

하지만 위 코드에서는 1초 뒤에 Second가 출력되도록 하였는데, 이렇게 작성을 해도 코드가 중지되지 않고 콘솔에서는 1초 뒤에 Second라는 결과가 출력됩니다.

 

이렇게 비동기 프로그래밍을 이용하면 작업을 중지시키지 않고 다른 작업을 진행시킬 수 있습니다.

 

비동기 프로그래밍에 대한 소개를 마쳤으니 이제 Stream에 대해 알아보겠습니다.

Stream

연속적인 데이터 이벤트를 비동기적으로 처리하는 객체로 실시간 데이터 처리에 매우 적합

 

빠르게 예시를 통해 설명해 보겠습니다.

Stream 예씨

위 코드에서 수행하는 작업을 단계별로 설명해 보겠습니다.

  1. StreamController를 생성합니다.
  2. Controller에 Firest, Second, Third 데이터를 추가합니다.
  3. 그리고 listen을 통해 streamController에 데이터를 출력합니다.
  4. 마지막으로 모든 작업이 완료되었으니 close함수를 통해 controller를 닫아줍니다.

소개드린 Stream과 비동기 프로그래밍을 활용하여 주기적으로 데이터를 추가하고, 해당 스트림에 있는 데이터를 출력하는 코드를 생성해 보겠습니다.

위 코드에서는 Timer를 통해 1초마다 데이터를 추가해 주고, 5초 뒤에 timer와 streamController를 종료하는 코드를 작성해 보았습니다.

이 내용은 연속적인 데이터 흐름을 효과적으로 보여줌으로써 실시간 데이터를 사용하는 앱에서는 중요한 개념이라고 생각합니다.

Stream의 종류 

Single subscription stream

가장 일반적인 종류의 스트림에는 더 큰 전체의 일부인 일련의 이벤트가 포함됩니다. 이벤트는 올바른 순서로 전달되어야 하며 하나도 놓치지 않아야 합니다. 이는 파일을 읽거나 웹 요청을 받을 때 얻는 종류의 스트림입니다.

이러한 스트림은 한 번만 들을 수 있습니다. 나중에 다시 들을 경우 초기 이벤트를 놓치게 되고 나머지 스트림은 의미가 없게 됩니다. 들을 때 데이터가 페치 되어 청크로 제공됩니다.

Broadcast streams

다른 종류의 스트림은 한 번에 하나씩 처리할 수 있는 개별 메시지를 위한 것입니다. 이러한 종류의 스트림은 예를 들어 브라우저의 마우스 이벤트에 사용할 수 있습니다.

언제든지 이러한 스트림을 듣기 시작할 수 있으며, 듣는 동안 발생하는 이벤트를 받게 됩니다. 여러 리스너가 동시에 들을 수 있으며, 이전 구독을 취소한 후 나중에 다시 들을 수 있습니다.

이벤트 수신

 

이벤트 수신 시 onError, onDone 함수로 에러 캐치, 완료 시 수행할 작업 등 여러 가지를 핸들링할 수 있습니다.

데이터 변환

Stream에서 발생하는 데이터 이벤트를 변환하려면 map, where과 같은 연산자 사용할 수 있음

Stream의 각 항목에 대해 지정된 함수를 적용하고 결과를 새로운 Stream으로 변환합니다.

변환함수 중에서 map을 사용해서 데이터를 변환해 보았는데요, 앞에 Converted Data를 추가하여 데이터를 변환하는  streamController2를 생성합니다.

또는 where 연산자를 사용해 특정 조건에 일치하는 데이터만 추가하여 출력할 수도 있습니다.

사용 예시

실시간 채팅 앱

Stream을 활용하여 실시간 메세지를 주고 받는 채팅 앱 구현

 

금융 앱의 실시간 주가 표시

주식 시장의 실시간 데이터를 Stream 을 통해 처리하여 사용자에게 주가 변동 정보를 실시간 제공

 

폼 입력의 실시간 검증

사용자가 폼에 입력하는 내용을 Stream 을 통해 검증하고, 입력 조건을 충족하지 않을 경우 즉시 피드백 제공

 

이번 글에서는 Stream에 대해서 정리해 보았는데 기존에 알고 있던 내용도 작성하면서 더 자세하게 알게 되고 좋은 경험이었습니다.