Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

nomad-programmer

[Programming/Dart] Stream : async*, yield 본문

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는 열린 채로 존재하며 요청할 때 연산한다.
Comments