๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ
โข
Future
โข
async, await
โข
Stream
Future
์ข
๋ฃ๋์ง ์์ ๋น๋๊ธฐ ์์ฒญ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ๋ฆฌํค๋ ํด๋์ค
์์ฒญ ํ, ๊ฒฐ๊ณผ๋ฅผ ๋์ค์ ๋ฐ๊ธฐ ์ํด ์ฌ์ฉ
Future<๋ฐํํ์
> ๋ฉ์๋๋ช
() async {
return ๋ฐํ๊ฐ;
}
Dart
๋ณต์ฌ
// 5์ด ์ง์ฐ
Future<void> fetchOrder1() async {
// Future.delayed( ์ง์ฐ, ์ฝ๋ฐฑํจ์ )
Future.delayed(const Duration(seconds: 5), () {
print('5์ดํ ์ถ๋ ฅ...');
});
}
// 3์ด ์ง์ฐ
Future<void> fetchOrder2() async {
// Future.delayed( ์ง์ฐ, ์ฝ๋ฐฑํจ์ )
Future.delayed(const Duration(seconds: 3), () {
print('3์ดํ ์ถ๋ ฅ...');
});
}
void main(List<String> args) {
fetchOrder1();
fetchOrder2();
print('์์ฒญ ์ค...');
}
Dart
๋ณต์ฌ
Future<String> fetchData() {
return Future.delayed(Duration(seconds: 2), () {
return '๊ฒฐ๊ณผ ๋ฐ์ดํฐ';
});
}
void fetchDataAwait() async {
String result = await fetchData();
print(result);
}
void main(List<String> args) {
// then(data)
// : Future ๊ฐ ์๋ฃ๋ ํ, ๋ฐํ๊ฐ data ๋ฅผ ๊ฐ์ ธ์์,
// ํน์ ์์
์ ์ํํ๋ ๋ฉ์๋
fetchData().then((data) {
print(data);
print('์ถ๊ฐ ์์
...');
});
fetchDataAwait();
print('์์ฒญ ์ค...');
}
Dart
๋ณต์ฌ
async, await
aysnc
ํจ์๊ฐ ๋น๋๊ธฐ๋ก ์คํ๋๋๋ก ์ง์ ํ๋ ํค์๋
async ํจ์๋ ๋น๋๊ธฐ๋ก ์คํ๋๋ Future ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค.
Future<void> exampleAsyncFunction() async {
// ๋น๋๊ธฐ ์์
์ํ
}
Dart
๋ณต์ฌ
await
async ํจ์ ๋ด์์ Future ์๋ฃ ์, ํจ์ ์คํ์ ๊ธฐ๋ค๋ ค์ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํํด์ฃผ๋ ํค์๋
Future<void> exampleAsyncFunction() async {
// ๋น๋๊ธฐ ์์
์ํ
var result = await someAsyncOperation();
print(result);
}
Dart
๋ณต์ฌ
Stream
๋น๋๊ธฐ ์์
๊ฒฐ๊ณผ๋ฅผ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ํด๋์ค
Stream<int> countStream(int to) async* {
for(int i = 1 ; i <= to ; i++ ){
await Future.delayed(Duration(seconds: 1), () {
print('์์ฒญ : $i');
});
yield i;
}
}
Future<int> sumStream(Stream<int> stream) async {
var sum = 0;
print('ํฉ๊ณ');
await for(final value in stream ) {
sum += value;
print('์ ๋ฌ๋ ๊ฐ : $value - sum : $sum');
}
return sum;
}
Future<void> main(List<String> args) async {
var stream = countStream(10);
var sum = await sumStream(stream);
print('์์ฒญ์ค...');
print(sum);
print(stream);
}
Dart
๋ณต์ฌ
์ฝ๋ ์คํ ํ๋ฆ
1.
main ํจ์์์ countStream(10)์ ํธ์ถํ์ฌ Stream ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค.
2.
sumStream ํจ์์ Stream์ ์ ๋ฌํ์ฌ ํฉ๊ณ๋ฅผ ๊ณ์ฐํฉ๋๋ค.
3.
countStream ํจ์์์ 1์ด ๊ฐ๊ฒฉ์ผ๋ก ์ซ์๋ฅผ ์์ฑํ๋ฉด์ Stream์ผ๋ก ์ ๋ฌํฉ๋๋ค.
4.
sumStream ํจ์์์ Stream์ ๊ฐ ์ซ์๋ฅผ ๋ฐ์์ ํฉ๊ณ๋ฅผ ๊ณ์ฐํ๊ณ ์ถ๋ ฅํฉ๋๋ค.
5.
๋ชจ๋ ์ซ์๊ฐ ์ฒ๋ฆฌ๋๋ฉด ์ต์ข
ํฉ๊ณ๋ฅผ ๋ฐํํ๊ณ ์ถ๋ ฅํฉ๋๋ค.
6.
stream ๊ฐ์ฒด์ ๋ฌธ์์ด ํํ์ ์ถ๋ ฅํฉ๋๋ค.
1. countStream ํจ์:
โข
1๋ถํฐ ์
๋ ฅ๋ฐ์ ์ซ์๊น์ง 1์ด ๊ฐ๊ฒฉ์ผ๋ก ์ซ์๋ฅผ ์์ฑํ๋ Stream์ ์์ฑํฉ๋๋ค.
โข
async* ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ ์์ฑ๊ธฐ ํจ์๋ก ์ ์ํฉ๋๋ค.
โข
for ๋ฐ๋ณต๋ฌธ์์ 1๋ถํฐ to๊น์ง ์ซ์๋ฅผ ๋ฐ๋ณตํฉ๋๋ค.
โข
Future.delayed๋ฅผ ์ฌ์ฉํ์ฌ 1์ด ์ง์ฐ์ ์๋ฎฌ๋ ์ด์
ํฉ๋๋ค.
โข
yield ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ์ซ์๋ฅผ Stream์ผ๋ก ์ ๋ฌํฉ๋๋ค.
2. sumStream ํจ์:
โข
Stream์ ์ ๋ฌ๋ฐ์์ ํฉ๊ณ๋ฅผ ๊ณ์ฐํ๋ ํจ์์
๋๋ค.
โข
async ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ ํจ์๋ก ์ ์ํฉ๋๋ค.
โข
sum ๋ณ์๋ฅผ 0์ผ๋ก ์ด๊ธฐํํฉ๋๋ค.
โข
await for ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ Stream์ ๊ฐ ๊ฐ์ ์ํํฉ๋๋ค.
โข
๊ฐ ๊ฐ์ sum์ ๋ํ๊ณ , ํ์ฌ ๊ฐ๊ณผ ํฉ๊ณ ๊ฐ์ ์ถ๋ ฅํฉ๋๋ค.
โข
์ต์ข
ํฉ๊ณ๋ฅผ ๋ฐํํฉ๋๋ค.
3. main ํจ์:
โข
countStream ํจ์๋ฅผ ํธ์ถํ์ฌ 1๋ถํฐ 10๊น์ง์ ์ซ์๋ฅผ ์์ฑํ๋ Stream์ ์์ฑํฉ๋๋ค.
โข
sumStream ํจ์๋ฅผ ํธ์ถํ์ฌ Stream์ ํฉ๊ณ๋ฅผ ๊ณ์ฐํฉ๋๋ค.
โข
"์์ฒญ์ค..." ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
โข
๊ณ์ฐ๋ ํฉ๊ณ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
โข
stream์ ์ถ๋ ฅํฉ๋๋ค. (stream ๊ฐ์ฒด์ ๋ฌธ์์ด ํํ์ ์ถ๋ ฅํฉ๋๋ค.)
์ถ๋ ฅ ๊ฒฐ๊ณผ
ํฉ๊ณ
์์ฒญ : 1
์ ๋ฌ๋ ๊ฐ : 1 - sum : 1
์์ฒญ : 2
์ ๋ฌ๋ ๊ฐ : 2 - sum : 3
...
์์ฒญ : 10
์ ๋ฌ๋ ๊ฐ : 10 - sum : 55
์์ฒญ์ค...
55
Dart
๋ณต์ฌ