일반적인 함수는 한 번 실행되면 끝날 때까지 멈출 수 없다.
function normalFunc(){
console.log('I');
console.log('cannot');
console.log('be');
console.log('stopped');
}
하지만 generator function은 중간에 멈출 수 있고, 멈춘 지점부터 다시 이어서 나갈 수 있다.
Generator는 iterator를 작성하는 일을 단순하게 해주는 특수한 함수이다.
Generator는 단일 값이 아닌 일련의 결과물을 생성하는 함수이다.
JavaScript에서 generator는 iterator를 반환한다.

Symbol.iterator를 신경쓰지 않아도 된다.
next()를 실행할 필요가 없다.
수동적으로 next()의 반환 객체를 만들 필요가 없다
{ value : any , done : boolean }상태를 따로 저장할 필요가 없다.
iterator이면서 iterable이기 때문에 내부에서 상태를 관리할 수 있다.Lazy Evaluation, 게으른 평가법
let x = 10;
if(x < 5 && x === 10) { ... }
// x < 5는 이미 false 이므로
// 뒤의 연산 x===10은 실행하지 않는다
Lazy Evalutaion 방식을 사용한다.