generator 지연성
- lazy evaluation === 제네레이션 서스펜션
- 같은 iterable을 생성한다하더라도 일반 함수로 생성하는 것과 generator로 생성하는 것은 다르다
-> 후자가 지연 평가를 하기 때문에 효율적임
- 제너레이터에서는 yield를 이용해 반환할 값을 만들어낸다
- 값을 만들어낼 때 while, for문과 같은 표현식을 사용할 수 있다
- generator의 반환 값은 wellformed iterable이기 때문에 for of와 같은 반복기를 실행해야 순환되는 값을 얻을 수 있는데,
- generator로 만들어진 iterable은 반복기를 실행할 때(next가 호출 될 때) generator함수 안의 순환 값을 만들어내는 while, for이 한번씩 실행된다
- 일반적인 for, while문은 진행을 멈출 수 없는데 generator함수 안에서는 가능하다
- 먼저 얼마나 값이 필요한지 파악한 후 계산하는 것!
- 계산을 미루기 때문에 Lazy Evaluation이라고 부름
- 체이닝으로 함수를 실행할 때 일반적인 순서가 아닌 가장 뒤에 있는 반복기부터 역으로 실행되고, 반환 값이 다시 순차적으로 전달된다
- 배열을 새로 만들 때나, 이미 있는 배열을 가지고 새로운 배열을 만들어낼 때(각 요소에 연산을 할 때) 유용하다