generator에 대해

YOUNGJOO-YOON·2021년 6월 21일
0

typeScript

목록 보기
3/65

TOC

  1. generator

// js
function* idMaker(){
    var index = 0;
    while(true)
        yield index++;
}

var gen = idMaker(); // "Generator { }"

console.log(gen.next().value); // 0
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2

자바스크립트의 제네레이터 함수는 위와 같다.

무한히 반복하는 반복문을 개발자가 원하는 만큼 끊어쓴다고 생각하면 된다.
위 코드는 function* 으로 시작하는데 이는 generator함수를 뜻하는 것이고

yield는 끊어서 가져가는 값에 대해 yield값을 반환해주겠다는 것이다.
return이 아닌 이유는 반복을 종료시키는 이미 있는 예약어이기 때문이다.

또한 변수 gen은 generator를 받게되고
이를 실행시키기 위해 다시 예약어 next() 메소드가 등장한다.

next()는 무한히 반복하는 generator의 yield값을 반환받는데 이는 객체이다.

gen.next()={value:0, done:false}
gen.next()={value:1, done:false}
...

이처럼 무한히 반복하는 반복문을 원하는 대로 끊어서 사용할 수 있게 되었다.

이는 typescript도 잘 지원을 한다. 사용 방법은 같다.

 // ts
function* fibonacciGenerator(){
let a=0
let b=1
while(true){
 yield a;
  [a,b]=[b,a+b] // a=b, b=a+b 구조분해할당
 }
}

let fibo=fibonacciGenerator();
fibo.next(); // {value:0, done:false}
profile
이 블로그의 글은 제 생각을 정리한 글과 인터넷 어딘가에서 배운 것을 정리한 글입니다. 출처는 되도록 남기도록 하겠습니다. 수정 및 건의 오류 등이 있으면 언제든지 댓글 부탁드립니다.

0개의 댓글