본문 바로가기
Dart/기초

[Dart] Generator 제너레이터

by 붕어사랑 티스토리 2021. 10. 15.
반응형

Generator란?

연속적인 값들의 모음을 만들어주는 함수이다.

 

sync한 데이터와 async한 데이터를 만들어줄때 방법이 다르다

 

  • Synchronous generator: Iterable 객체를 리턴해야 한다
  • Asynchronous generator: Stream 객체를 리턴해야 한다

 

 

아래는 sync한 버전의 예시이다. 0부터 n까지의 연속적인 숫자의 데이터들을 만들어 return해 준다

 

sync 제너레이터를 만드려면 function body 앞에 sync* 를 붙여주고 yield 키워드를 이용해 데이터를 생성해나간다

 

 

Iterable<int> naturalsTo(int n) sync* {
  int k = 0;
  while (k < n) yield k++;
}

 

async 제너레이터는 async* 를 함수 구현체 앞에 붙여주고 Stream 객체를 리턴해준다.

 

Stream<int> asynchronousNaturalsTo(int n) async* {
  int k = 0;
  while (k < n) yield k++;
}

 

 

 

 

만약 recursive한 제너레이터라면 yield* 를 이용하여 퍼포먼스를 향상시킬 수 있다

Iterable<int> naturalsDownFrom(int n) sync* {
  if (n > 0) {
    yield n;
    yield* naturalsDownFrom(n - 1);
  }
}
반응형

댓글