🐦 Flutter

dart 비동기 프로그래밍

ji-hyun 2022. 6. 2. 09:58

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