본문 바로가기
Dart (Flutter)

[Dart] Generator

by llHoYall 2023. 2. 10.

Generator 역시 어제 오늘 등장한 내용은 아닌지라 아마 다들 알고 계실거라 생각합니다.

Keyword 역시 다른 언어들과 동일하게 yield를 사용합니다.

Generator를 사용하면, 요청될 때마다 현재 데이터를 반환 후 다음 데이터가 요청될 때까지 대기하게 됩니다.

간단하게만 살펴보도록 할게요.

Built-In Generator

Dart는 2가지 종류의 내장 generator를 제공합니다.

  • Synchronous Generator : Iterable object를 반환합니다.
  • Asynchronous Generator : Stream object를 반환합니다.
Iterable<int> syncNaturalsTo(int n) sync* {
  int k = 0;
  while (k < n) yield k++;
}

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

with Recursion

재귀 호출과 함께 사용하여 성능 개선을 할 수 있습니다.

필요할 때 필요한 만큼의 데이터만 생성하기 때문에, lazy evaluation, dynamic allocation 등의 메모리 측면에서 효율적으로 사용을 할 수 있고, 재귀 호출을 이용하여 제어 흐름을 단순화하고 예측 가능하게 만들어 cache 사용 측면에서도 보다 효율적으로 사용할 수 있기 때문입니다.

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

Wrap Up

대량의 데이터를 다룰 때, 메모리 측면에서 효율적인 프로그래밍을 가능하게 만들어 주기 때문에 generator도 숙지하고 있어야 합니다.

문법적으로는 어려울 게 없고, 다른 언어들 통해서 이미 잘 알고 계시겠지만 개념적으로 잘 숙지하시길 바래요.

'Dart (Flutter)' 카테고리의 다른 글

[Dart] Metadata  (0) 2023.02.11
[Dart] Library  (0) 2023.02.10
[Dart] Asynchronous  (0) 2023.02.10
[Dart] Exception Handling  (0) 2023.02.09
[Dart] Generics  (0) 2023.02.08

댓글