
function* simpleGenerator() {
console.log("첫 번째 yield 이전");
yield 1;
console.log("두 번째 yield 이전");
yield 2;
console.log("제너레이터 함수 종료");
}
// 제너레이터 객체 생성
const generator = simpleGenerator();
// next 호출과 실행 과정
console.log("제너레이터 시작");
const result1 = generator.next(); // "첫 번째 yield 이전"을 출력하고 1을 반환
console.log(result1.value); // 출력: 1
console.log(result1.done); // 출력: false
const result2 = generator.next(); // "두 번째 yield 이전"을 출력하고 2를 반환
console.log(result2.value); // 출력: 2
console.log(result2.done); // 출력: false
const result3 = generator.next(); // "제너레이터 함수 종료"를 출력하고 undefined를 반환, 함수 종료
console.log(result3.value); // 출력: undefined
console.log(result3.done); // 출력: true
function*키워드로 선언하여 제너레이터 함수를 호출
next 메서드를 호출하여 제너레이터 함수의 실행을 시작합니다. 함수는 yield 키워드를 만날 때까지 실행되며, 해당 yield 표현식의 값을 반환하고 일시 중단됩니다. done 프로퍼티는 false로 설정됩니다.
제너레이터 함수가 일시 중단되면 호출자는 필요한 작업을 수행하거나 다른 동작을 실행할 수 있습니다.
추가 next 호출을 통해 함수를 재개하면 이전에 중단된 지점에서 코드가 실행되고, 다음 yield 키워드를 만날 때까지 진행됩니다. 이때 yield 표현식의 값을 반환하고, done 프로퍼티는 여전히 false로 유지됩니다.
이러한 단계를 반복하여 필요한 만큼 값을 가져오고, 모든 yield를 만난 후 done 프로퍼티가 true로 변경되면 함수의 실행이 종료됩니다.
제너레이터란, 코드 블록의 실행을 일시 중지했다가 필요한 시점에 재개할 수 있는 특수한 함수다.
제너레이터 함수는 반복적으로 값을 내보내고, 호출자는 필요할 때 값을 가져와서 함수의 실행을 제어할 수 있습니다. 이러한 특성은 비동기 작업을 조절하거나 순차적인 작업을 구현하는 데 유용하게 활용됩니다
제너레이터 함수는 함수 호출자에게 함수 실행의 제어권을 양도할 수 있다.
제너레이터 함수는 함수 호출자와 함수의 상태를 주고받을 수 있다.
제너레이터 함수를 호출하면 제너레이터 객체를 반환한다.