JavaScript: Generator(생성기)

이토니·2024년 1월 16일
0

JavaScript

목록 보기
26/33
post-thumbnail

Generator 함수는 사용자의 요구에 따라 다른 시간 간격으로 여러 값을 반환할 수 있다.

  • 일반 함수는 단 한 번의 실행으로 함수 끝까지 실행되지만,
  • 제네레이터 함수는 사용자의 요구에 따라 일시적으로 정지될 수 있고, 다시 시작될 수도 있다.
  • 이를 통해 값을 하나씩 생산 (yield)할 수 있다.
// Generator Example
function* sayNumbers() { // 제네레이터 함수 sayNumers 정의
  yield 1; // 각 호출 시 1,2,3이 차례로 반환됨
  yield 2;
  yield 3;
}

const number = sayNumbers(); // 제네레이터 객체 생성, number 변수에 할당
// number.next() 호출로 제네레이터 함수가 다음 yield 반환
console.log(number.next().value); //1
console.log(number.next().value); //2
console.log(number.next().value); //3
console.log(number.next().value); //undefined
  • yield 키워드를 통해 함수 실행을 일시적으로 멈추고 값을 반환하는 것이다.
  • next()를 호출하면 멈춘 부분부터 다시 시작한다.

Generator 객체가 자신의 이터레이터로서 기능한다.

  • Generator 객체는 자신의 이터레이터로 자기 자신을 반환한다.
  • 자바스크립트의 제네레이터 객체는 자체적으로 이터레이터 프로토콜을 구현하기 때문에 그들 자신이 이터레이터이다.
  • generatorgenerator[Symbol.iterator]()의 호출 결과와 동일한 객체이다.
  • 따라서 제너레이터를 사용하여 이터러블 및 이터레이터 패턴을 쉽게 구현할 수 있다.
function* generatorFunction() {
    yield 1;
}

const generator = generatorFunction();

// 제네레이터 객체와 이터레이터 비교
console.log(generator === generator[Symbol.iterator]()); //true
profile
cool & soft codes

0개의 댓글