오늘은 내일배움캠프의 Dart 프로그래밍 1주차 강의 중 19강: 비동기 프로그래밍과 Dart를 복습했습니다. 비동기 프로그래밍의 개념과 Dart에서 이를 구현하는 방법에 대해 중점적으로 학습했습니다.
dart:async 라이브러리의 Future와 Stream 클래스를 통해 비동기 프로그래밍을 지원합니다.Future<int>, Future<String> 등 다양한 타입의 결과를 처리할 수 있습니다.void introduce(String name) {
print('$name의 자기소개 시작 !');
Future.delayed(Duration(seconds: 2), () {
print('안녕 ? 나는 $name ~');
});
print('$name의 자기소개 끝 !');
}
void main() {
introduce('강미래');
introduce('강현재');
}
/* 출력 결과:
강미래의 자기소개 시작 !
강미래의 자기소개 끝 !
강현재의 자기소개 시작 !
강현재의 자기소개 끝 !
안녕 ? 나는 강미래 ~
안녕 ? 나는 강현재 ~
*/
async와 await는 비동기적인 코드를 동기적인 코드처럼 작성할 수 있게 해줍니다.await는 Future 류의 코드 앞에만 사용할 수 있으며, await를 포함하는 함수는 반드시 async로 선언해야 합니다.Future<String> introduce(String name) async {
print('$name의 자기소개 시작 !');
await Future.delayed(Duration(seconds: 2), () {
print('안녕 ? 나는 $name ~');
});
print('$name의 자기소개 끝 !');
return '이름은 $name ~';
}
void main() async {
var riverfuture = await introduce('강미래');
var riverpresent = await introduce('강현재');
print('나의 $riverfuture 너의 $riverpresent');
}
Stream<int> emitNumbers(int first) async* {
for (var i = first; i >= 0; i--) {
yield i;
await Future.delayed(Duration(seconds: 1));
}
}
void main() {
emitNumbers(10).where((number) => number.isOdd).listen((number) {
print('[홀수 타이머] $number');
});
emitNumbers(10).where((number) => number.isEven).listen((number) {
print('[짝수 타이머] $number');
});
}
yield는 Stream에서 값을 방출하는 키워드입니다.async*는 Stream을 반환 타입으로 갖는 함수에 사용합니다.yield를 통해 방출된 값은 listen() 메서드를 통해 받아올 수 있습니다.Stream<String> emitNames() async* {
yield '강미래';
yield '강현재';
yield '강과거';
}
void main() {
int number = 1;
emitNames().listen((name) {
print('$number번째는 $name ~');
number += 1;
});
}
비동기 프로그래밍은 시간이 오래 걸리는 작업을 효율적으로 처리할 수 있게 해주는 중요한 개념입니다. Dart에서 제공하는 Future와 Stream 클래스를 통해 다양한 비동기 작업을 처리할 수 있으며, async와 await 키워드를 사용해 비동기 코드를 더 직관적으로 작성할 수 있습니다.