함수의 실행을 중간에 멈추었다가 재개할 수 있는 기능을 제공하는 특수한 함수.
일반 함수와는 다르게, Generator는 호출 즉시 실행되지 않고, 실행 컨텍스트를 유지하면서 특정 시점에서 멈추거나 다시 실행할 수 있다.
비동기 처리, 반복 제어, 데이터 스트림 같은 작업에서 유용하게 사용할 수 있다.
Generator 함수는 function* 키워드로 정의한다.
yield 키워드를 사용하여 함수 실행을 일시 중지하거나 값을 반환할 수 있다.
function* generatorFunction() {
yield 1;
yield 2;
yield 3;
}
const gen = generatorFunction(); // Generator 객체 반환
console.log(gen.next()); // { value: 1, done: false }
console.log(gen.next()); // { value: 2, done: false }
console.log(gen.next()); // { value: 3, done: false }
console.log(gen.next()); // { value: undefined, done: true }
value: yield 키워드 뒤에 반환된 값.
done: Generator가 끝났는지 여부.
Generator 함수를 호출하면 함수가 바로 실행되지 않고, Iterator 객체를 반환한다.
이 객체의 next() 메서드를 호출하면 Generator가 실행된다.