🤓❔❓
나의 의문점 :
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 (0) | 2024.08.07 |
자꾸 헷갈리는 Const & Final / Var & Dynamic 정리 (0) | 2024.08.07 |