동기/비동기
동기 : 요청하고 나서 응답이 올 때까지 더는 코드를 진행하지 못하고 기다렸다가 응답을 받으면 다음 코드 실행
비동기 : 응답을 받지 않았어도 대기하지 않고 다음 코드 진행, 데이터베이스에서 데이터를 가져오는 작업은 동기로 실행하면 앱이 매무 느려질 수 있어 이런 작업은 비동기로 처리를 한다.
Future
Future : future 클래스는 미래라는 단어의 의미대로 미래에 받아올 값을 뜻한다.
void addNumbers(int a, int b) {
print('${a} + ${b} 계산 시작!!');
// Future : 미래값을 표현하는 Future클래스
//3초후에 동작
Future.delayed(Duration(seconds: 3), () {
print('${a} + ${b} = ${a + b}');
});
print('${a} + ${b} 코드 실행 끝');
}
void main(){
addNumbers(1,1);
}
async / await
async / await : 비동기 처리로 사용하는 방법으로 코드가 작성된 순서대로 실행가능
Future<void> addNumbers(int a, int b) async {
print('$a + $b 계산시작!!');
await Future.delayed(Duration(seconds: 3), (){
print('$a + $b = ${a + b}');
});
print('$a + $b 계산종료!!');
}
void main(){
addNumbers(1, 2);
// 대기 시간에 다음 코드를실행
addNumbers(1, 4);
}
Stream
Future는 반환값을 딱 한번 받아내는 비동기 프로그래밍에서 사용하지만 지속적으로 반환 받을 때는 Stream을 사용.
스트림을 사용하려면 플러터에서 기본으로 제공하는 dart:async 패키지를 불러와야 한다.
import 'dart:async';
void main(){
final controller = StreamController();
// 하나의 stream에는 하나의 listen만가능
// final stream = controller.stream;
// listen을 여러개 주고 싶은 경우
final stream = controller.stream.asBroadcastStream();
final streamListener1 = stream.listen((val){
print('listen1');
print(val);
});
final streamListener2 = stream.listen((val){
print('listen2');
print(val);
});
controller.sink.add(1);
controller.sink.add(2);
controller.sink.add(3);
controller.sink.add(4);
}
'Mobile > Dart' 카테고리의 다른 글
(Dart)객체지향 프로그래밍 (1) | 2024.02.13 |
---|---|
(Dart) Dart 기본 문법 (0) | 2024.02.13 |
크로스 플랫폼/네이티브 앱 (0) | 2024.02.13 |