Stream, Future 둘의 차이점은 뭐지?

2024. 8. 12. 16:14·Flutter/Dart
🤓❔❓

나의 의문점 :

Stream이 뭘까?
기존 반응형 프로그램에서 얘기하는 Stream과 같은 스트림인가 ( 아니다.. 그냥 비동기 처리를 위해 만들어진 스트림일뿐이었다)
둘 다 비동기 프로그래밍 관련한거라면 Future와 Stream은 언제쓰는거지.. 잘 이해가 안가서 작성하는 글 

 

1. Stream 알아보기

- Stream이란?

Stream은 마치 파도처럼 데이터를 한 줄로 보내는 거라고 생각하면 된다. 데이터를 한 번에 다 보내는 게 아니라, 순서대로 하나씩 흘려 보내는거다. 마치 물이 흐르는 강이나, 한 줄로 나란히 서 있는 사람들이 차례로 앞으로 걸어가는 것과 비슷하다. 

예를 들어보자. 유튜브 에서 동영상을 본 적이 있을 거다. 동영상이 한 번에 모두 로딩되는 게 아니라, 조금씩 조금씩 로딩되면서 재생되는데,  Stream도 그와 비슷하다. 데이터를 한 번에 다 보내는 게 아니라, 필요한 만큼 조금씩 내보내는것이다

 

Stream을 파이프라인이라고 생각해봐. 파이프라인 안에 물이 흐르듯이, Stream 안에는 데이터가 흐르는 거야. 우리가 Stream을 사용하면, 이 데이터를 차례대로 받아서 처리할 수 있어

 

2. Stream 잘 이해해보기

 

이해하기 쉽게 stream을 사용해 코드를 작성해보자

 

Stream을 사탕공장에 비유해 본다면, 공장에서는 사탕을 한꺼번에 다 만들지 않고,

차례대로 하나씩 만들어서 보낸다. (아까 얘기 했던 스트림의 특성)

이때 사탕들이 차례대로 컨베이어 벨트를 타고 우리에게 전달되는 시스템이다.

Stream은 이 컨베이어 벨트와 같은 역할을 한다고 보면 된다

- Dart 코드로 예시 보기

이제 이 사탕 공장 예시를 Dart 코드로 설명해보자~.~

(사실 스트림 이해를 쉽게 하기 위해 올린 예시지, 스트림 사용을 적절하게 한 예시는 아니야 참고해~.~)

// Dart에서 Stream 만들기
Stream<int> createCandyStream() async* {
  // 1부터 5까지 숫자를 하나씩 내보내는 Stream을 만듦
  for (int i = 1; i <= 5; i++) {
    yield i;  // 숫자 하나를 내보냄
    await Future.delayed(Duration(seconds: 1));  // 잠깐 쉬었다가(1초) 다음 숫자를 내보냄
  }
}

void main() {
  // Stream 구독하기
  Stream<int> candyStream = createCandyStream();

  candyStream.listen((candy) {
    print("사탕 $candy 번이 도착했습니다!");
  });
}

 

  • createCandyStream: 이 함수는 1부터 5까지의 숫자를 차례로 내보내는 Stream을 만들어. 각각의 숫자는 사탕이라고 생각할 수 있다
  • yield: 이건 "여기 사탕 하나 있어!"라고 외치는 것과 같음. 이 숫자가 바로 사탕!
  • await Future.delayed: 이 부분은 사탕 하나가 만들어지고 나서, 잠깐 쉬는 시간을 주는 것. 쉬는 시간 동안 다음 사탕을 기다리면 됨
  • listen: 이제 공장에서 사탕이 차례대로 도착하면, 우리가 이 사탕들을 받아서 하나씩 먹을 준비를 하면 된다. 그리고 사탕이 도착할 때마다 "사탕 1번이 도착했습니다!"처럼 출력하게 만든다.

Stream을 사용하면 한꺼번에 모든 데이터를 처리할 필요가 없어서, 메모리도 아끼고, 필요한 데이터만 빠르게 처리할 수 있음. 예를 들어, 네트워크에서 데이터를 받을 때, 데이터를 다 받아야만 사용하지 않고, 도착한 데이터부터 바로바로 처리할 수 있는 것. Stream의 장점이다

 

3. Stream과 Future 비교

 

Future, Stream에 대해 비교해보고 어떨 때 어떤 키워드를 사용하면 좋을지 보도록 해보자~~

 

- Future vs Stream:

  • Future: Future는 한 번만 결과를 반환하는 비동기 작업에 사용됩니다잉. 예를 들어, 서버에서 데이터를 한 번 받아오거나, 파일을 읽는 작업은 한 번 완료되면 끝나는 작업이지. 이런 경우에는 Future를 사용하는 게 적절하겠져
  • Stream: Stream은 여러 번 데이터를 연속적으로 받아야 하는 상황에서 사용돼. 예를 들어, 채팅 메시지, 실시간 센서 데이터, 파일을 여러 조각으로 읽어오는 경우에 적합해. 데이터가 여러 번 도착하거나, 지속적으로 발생할 때 Stream을 사용하는 게 좋습니다

 

📖 정리를 해보자면

지속적으로 날씨 api 데이터를 가지고 와서 10분만에 업데이트를 해야한다 -> 연속적으로 데이터를 받아야 하니까 Stream
채팅메시지 같은 경우 계속해서 해당 스트림에서 데이터를 받아야하기때문에 -> Stream
파일 한번만 읽기 -> 한 번만 하면 된다고? Future

이런식으로 이해를 해나가면 되겠다!

 

'Flutter > Dart' 카테고리의 다른 글

멤버 변수 vs 상태  (0) 2024.10.14
fromMap을 사용해 map데이터 쉽게 사용하기  (0) 2024.09.19
Enum이 뭐고, Enhanced Enum은 왜 쓸까?  (0) 2024.08.12
Call by Reference, Call by Value, 깊은 복사, 얕은 복사 in Dart  (2) 2024.08.07
자꾸 헷갈리는 Const & Final / Var & Dynamic 정리  (0) 2024.08.07
'Flutter/Dart' 카테고리의 다른 글
  • 멤버 변수 vs 상태
  • fromMap을 사용해 map데이터 쉽게 사용하기
  • Enum이 뭐고, Enhanced Enum은 왜 쓸까?
  • Call by Reference, Call by Value, 깊은 복사, 얕은 복사 in Dart
복복씨
복복씨
개발자여, 사고하라 !
  • 복복씨
    정리노트
    복복씨
  • 전체
    오늘
    어제
    • 분류 전체보기 (118)
      • 개발새발자 (21)
        • 의 삶 (7)
        • 의 회고 (9)
        • 의 낙서장 (5)
        • 영어 (0)
      • FrontEnd (1)
        • React (1)
      • Flutter (38)
        • 새싹 (5)
        • Dart (8)
        • Flutter (14)
        • iOS 에서 Flutter 로 전환하며 (2)
        • 챗지피티랑놀.기 (3)
        • 하루 한 입 플러터 (2)
      • CS (7)
        • 짤막지식 (6)
      • IOS (6)
        • Swift (0)
        • UIKit (1)
        • SwitUI (4)
      • 머신러닝-딥러닝 (28)
        • 논문리뷰 (3)
        • study (16)
        • Kaggle (9)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    IOS
    멋쟁이 사자처럼
    코드 결합도
    부트캠프
    futurerecord2
    새싹 플러터
    swiftui 플러터
    핫 리로드
    flutter lottie
    새싹 용산
    플러터 di
    FLUTTER
    사그널링서버
    깊은참조
    용산캠
    runzonedguarded
    한주 회고
    테킷 앱스쿨
    unawaited
    새싹
    시그널링데이터
    getit
    Flutter Lifecycle
    expando
    플러터
    dart
    initState()
    schedulemicrotask
    flutter 애니메이션
    플러터 새싹
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
복복씨
Stream, Future 둘의 차이점은 뭐지?
상단으로

티스토리툴바