Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 분리집합
- BOJ
- 문자열
- priority_queue
- 다이나믹프로그래밍
- 완전탐색
- backtracking
- 백준
- 알고리즘문제해결전략
- stack
- DFS
- Greedy
- 스택
- 너비우선탐색
- 이분탐색
- Algospot
- 종만북
- 동적계획법
- 알고스팟
- 그리디
- 백트래킹
- DP
- 누적합
- 재귀
- union-find
- 유니온파인드
- 분할정복
- acm
- 세그먼트트리
- BFS
Archives
- Today
- Total
DAMPER's 낙서장
1.4 Dart 스트림 통신하기 본문
728x90
다음 내용은 'Doit! 플러터 앱 프로그래밍' 책 내용을 정리한 내용입니다.
데이터를 순서대로 주고받을 것으로 생각해서 화면을 구성했는데 네트워크나 와이파이 연결이 끊기거나 특정 API 호출이 늦어져 순서가 달라지면 원하는 흐름대로 작동시킬 수 없다.
데이터를 순서대로 주고받아야 할 때 순서를 보장받기위해 스트림을 사용한다.
스트림은 처음에 넣은 데이터가 꺼낼 때도 가장 먼저 나오는 데이터 구조로 생각할 수 있다.
import 'dart:async';
Future<int> sumStream(Stream<int> stream) async {
var sum = 0;
await for(var value in stream) {
print('sum Stream : $value');
sum += value;
}
return sum;
}
Stream<int> countStream(int to) async* {
for(int i=1;i<=to;i++){
print('countStream : $i');
yield i;
}
}
void main() async {
var stream = countStream(10);
var sum = await sumStream(stream);
print(sum);
}
async* 는 앞으로 yield를 이용해 지속적으로 데이터를 전달하겠다는 의미이다.
위 코드에서 yield는 int형 i를 반환하는데, return은 한 번 반환하면 함수가 끝나지만 yield는 반환 후에도 계속 함수를 유지한다.
yield 값을 인자로 sumStream() 함수를 호출하면 이 값이 전달될 때마다 sum 변수에 누적해서 반환해 준다.
그리고 main() 함수에서 이 값을 받아서 출력하면 55가 나온다.
또 다음처럼 then() 함수를 이용해 스트림 코드를 작성할 수 있다.
void main() {
var stream = Stream.fromIterable([5, 4, 3, 2, 1]);
//stream.first.then((value) => print('first: $value'));
//stream.last.then((value) => print('last: $value'));
//stream.isEmpty.then((value) => print('isEmpty: $value'));
stream.length.then((value) => print('length: $value'));
}
Stream 클래스를 이용해 배열을 하나 만든 후 함수를 이용해서 값을 가져온다.
그런 다음 then() 함수로 가져다 사용한다.
하지만 스트림을 통해 데이터를 사용하면 데이터는 사라지기 때문에 한 번만 실행하도록 한다.
스트림은 실시간으로 서버를 살펴보다가 서버에서 데이터가 변경되면 화면을 새로고침하지않더라도 자동으로 변경된 데이터가 반영되어야 할 때 사용할 수 있는 유용한 클래스이다.
728x90
'Flutter' 카테고리의 다른 글
2-2. Flutter 프로젝트 기본 구조 2 (0) | 2022.02.14 |
---|---|
2-1. Flutter 프로젝트 기본 구조 (0) | 2022.02.12 |
1.3 Dart으로 JSON 데이터 주고받기 (0) | 2022.02.11 |
1-2. Dart 비동기 처리 (0) | 2022.02.11 |
1-1. Dart (0) | 2022.02.11 |