Programming/Dart
[Programming/Dart] Stream : async*, yield
scii
2020. 10. 10. 19:58
아래의 코드를 보자.
// async*는 yield를 쓴다는 의미이다.
Stream<int> createStream(List<int> numbers) async* {
for (int number in numbers) {
// yield는 제너레이터를 만든다는 뜻이다.
yield number;
}
}
void main() {
// 스트림 생성
var numStream = createStream([1, 2, 3, 4, 5]);
numStream.listen((int number) => print(number));
}
/* 결과
1
2
3
4
5
*/
스트림을 만드려면 async*와 yield를 써야 한다. 즉, 스트림 형식을 반환할때는 async* 키워드를 붙여야 한다.
- async* : async*는 제너레이터를 만든다는 뜻이다. 제너레이터는 게으르게(lazily) 데이터 연산을 할 때 쓰인다. 게으르다는 것은 미리 연산을 다 하는 것이 아니라, 요청이 있을 때까지는 연산 하는 것을 미루어 두었다가 필요할 때 처리하는 것을 뜻한다.
- yield : return이랑 유사하다. return은 한번 반환하면 함수가 종료되지만, yield는 열린 채로 존재하며 요청할 때 연산한다.