cpu thread
작업을 하는 가장 작은 단위
서버요청 때문에 cpu 가 놀게 됨 -> 굉장히 비효율적
그래서 Asynchronous Programming 이 생겨나게 됨
Stream
async 를 쓰면 한번에 한 값만 받아올 수 있다.
여러 값을 받아오면 리스트를 쓰던가 등등..
stream 은 완료 될때까지 값을 계속 반환할 수 있다.
stream 은 dart 에서 기본적으로 제공하는 패키지는 아니다.
패키지를 불러와서 사용해야 함
import 'dart:async';
void main() {
final controller = StreamController(); // dart:async 에서 StreamController 를 가져올 수 있다
final stream = controller.stream;
}
import 'dart:async';
void main() {
final controller = StreamController(); // dart:async 에서 StreamController 를 가져올 수 있다
final stream = controller.stream;
final streamListner1 = stream.listen((val){ // 값을 듣고 있다. 값이 들어오면 이 함수를 실행
print('Listner 1 : $val');
});
값을 듣고 있다. 값이 들어오면 이 함수를 실행
controller.stream 하면 listner 는 하나만 사용할 수 있다.
그래서 여러 개의 listner 를 사용하고 싶다면 asBroadcastStream 을 이용한다
import 'dart:async';
void main() {
final controller = StreamController(); // dart:async 에서 StreamController 를 가져올 수 있다
final stream = controller.stream.asBroadcastStream();
final streamListner1 = stream.listen((val){
print('Listner 1 : $val');
});
final streamListner2 = stream.listen((val){
print('Listner 2 : $val');
});
controller.sink.add(1);
controller.sink.add(2);
controller.sink.add(3);
controller.sink.add(4);
controller.sink.add(5);
}
import 'dart:async';
void main() {
final controller = StreamController(); // dart:async 에서 StreamController 를 가져올 수 있다
final stream = controller.stream.asBroadcastStream();
final streamListner1 = stream.where((val) => val % 2 == 0).listen((val){
print('Listner 1 : $val');
});
final streamListner2 = stream.where((val) => val % 2 == 1).listen((val){
print('Listner 2 : $val');
});
controller.sink.add(1);
controller.sink.add(2);
controller.sink.add(3);
controller.sink.add(4);
controller.sink.add(5);
}
저 코드의 where 는 값이 들어오는 즉시 변형 하겠다는 의미.
실제로도 자주 쓰이니 알아두어야 한다.
yield*
해당 값이 리턴될 때까지 기다림 == future 의 await 와 비슷한 개념
'🐦 Flutter' 카테고리의 다른 글
Flutter 생명주기 (0) | 2022.07.05 |
---|---|
[Flutter] json 파싱 정보글 모음 (0) | 2022.06.24 |
dart 함수형 프로그래밍 (0) | 2022.05.31 |
dart OOP (0) | 2022.05.30 |
flutter 기본 문법 (0) | 2022.05.28 |