JS. 42 Iterator & Generator

Iterator
Iterable
: 반복이 가능하다, 배열은 반복 가능한 객체
: for...of 이용 가능하거나 Symbol.iterator 값을 가지면 iterable
Iterator
: 반복자는 next() 호출해서 {value: , done: } 2 개의 속성을 가지는 객체 반환하는 객체


숫자 배열을 makeIterator 매개변수에 넣어 호출
nextIndex 초기값 0을 기준으로 인자로 들어온 숫자 배열 길이만큼
+1씩 해주면서 don: false값이 들어간 객체 반환
길이에 벗어나면 undefined과 함께 done: true 반환
numbersArr -> Iterable , numbersIterator -> Iterator
: 반복자(iterator)를 반환하는 메소드


arr, set, map 형태는 반복자 반환이 가능하나 객체 타입은 안되는 것을 확인
Generator
: 사용자 요구에 따라 다른 시간 간격으로 여러 값 반환 가능
단 한 번의 실행으로 함수 끝까지 실행되는 일반 함수와는 달리
사용자의 요구에 따라 일시적으로 정지될 수도, 다시 시작될 수도 있음


'*' : yield, 제너레이터 함수의 실행을 일시적으로 정지 = return과 유사

제너레이터의 Iterable에서 반환하는 Interator 자기 자신
yield

기본 createIds() 내 while은 무한으로 돌아가야하는 것이 맞음
하지만 yield 선언으로 필요 순간에만 돌아가게끔 설정
*Lazy Evaluation : 계산의 결과값이 필요 시까지 계산을 늦춰서 필요 데이터를 필요 순간에 생성

마찬가지로 next를 통해 1씩 증가된 상태를 반환
return(10)으로 10까지 증가한 상태에서 반환을 의미
yield*
yield에 를 붙이면 yield와 함께 표현된 이터러블 객체를 순회

