Javascript

자바스크립트에서 제너레이터(Generator)

ri5 2021. 12. 8. 14:05

자바스크립트에서 이터러블한 함수를 만들 때 사용되는 객체입니다.

 좀 더 자세하게 알아보도록 하겠습니다.

 

Generator function

제네레이터 함수는 function 앞에 *을 붙여서 정의하고 Generator로 선언한 함수는

Generator 객체를 반환합니다.

function* generator(i) {
	yield i;
	yield i+1;
}

const get = generator(10);

console.log(gen.next().value);
// output: 10

console.log(gen.next().value);
// output: 11

위 코드와 같이 첫 요청을 했을 때에는 값을 넣었을 때는 10을 리턴하지만 

next() 후 다시 리턴을 해보니 11을 리턴합니다. 여기서 한번더 next를 하게 되면 undefined를 리턴하게 됩니다.

 

Generator

Generator function에서 리턴되는 generator 객체는 아래의 코드와 같이 value와 done 객체가 출력 됩니다.

function* generator(i) {
	yield i;
	yield i+1;
}

const get = generator(10);

console.log(gen.next());
// {value: 10, done: false}

console.log(gen.next());
// {value: 10, done: true}

Generator의 활용 사례

일시적으로 중지하고 다시 시작해야 하는  for 루프에 사용

function* generator(limit) {
	let i = 0
    while(i < limit)
		yeled i++;   
}

console.log(generator(10).next().value) // 1
console.log(generator(10).next().value) // 2

console.log("hello world!") // hello world!

console.log(generator(10).next().value) // 3
  • [Symbol.Iterator]를 사용하여 반복 불가능한 객체에서 for 루프에서 사용할 반복 가능한 객체 생성
  • 배열을 무한 반복하다가 일정치까지 완료하면 처음으로 재설정