TypeScript 제네레이터

yield, next, return이 나누는 실행 일시정지

제네레이터 함수는 호출 시 바로 실행되지 않고 next 호출마다 yield 지점까지 진행되는 이터레이터 상태 기계다.

01

이터레이터 생성

function* 호출은 본문을 실행하지 않고 next 가능한 객체만 만든다.

lazy start
02

첫 next

처음 next를 호출하면 첫 yield까지 실행되고 value와 done이 나온다.

yield
03

값 주입

next(value)의 인자는 이전 yield 표현식의 결과로 들어간다.

resume input
04

종료 처리

return 값은 마지막 value가 되고 done true로 반복이 끝난다.

done
Iterable
for-of는 Symbol.iterator가 반환하는 iterator를 소비한다. 제네레이터는 직접 iterable protocol을 쉽게 구현하게 해준다.
protocol fit
Lazy
필요한 만큼만 계산하므로 큰 시퀀스 처리에 유리하다. 모든 값을 배열로 만들 필요가 없을 때 효과가 크다.
memory friendly
Control
yield는 값 생산과 실행 제어를 동시에 표현한다. 복잡한 상태 전이를 숨기면 읽기 어려워질 수 있다.
clarity first

제네레이터 사용 기준

반복 계약 반환 객체가 next와 done/value 구조를 만족한다.
상태 위치 외부 mutable state보다 generator 내부 흐름으로 상태를 표현한다.
종료 조건 무한 generator는 소비 쪽에서 break 조건을 명확히 둔다.

타입 예시

function* range(n: number): Generator<number> {
  for (let i = 0; i < n; i++) yield i;
        overflow-wrap: break-word;
        word-break: keep-all;
      }