작성
·
282
3
Lazy.range 함수가 이터러블 객체를 반환해서라기보다는
제너레이터의 yield를 통한 순차적인 제어권 위임때문이라고 보는게 더 맞지 않나요?
답변 1
5
안녕하세요 :)
질문자분께서 잘 알고 계시듯 yield가 순차적으로 제어권을 위임하는 것은 제너레이터가 이터레이터를 반환하고 그 이터레이터의 next 메서드를 통해 yield의 결과를 받으며 상호 동작하고 있기 때문에 지연 평가가 가능한 것이겠지요.
딱 어떤 부분이 지연평가를 가능하게 하는 가장 핵심 적인 부분인가라는 관점으로 바라본다고 한다면 저는 제너레이터는 수단이고 이터레이터가 오히려 더 핵심적인 아이디어라고 이야기할 수 있다고 생각합니다.
아래 링크는 타 회사 개발자분들께 오프라인으로 교육할 때 사용했던 자료여서 영상 공개는 어렵지만 코드를 보실 수 있는데요.
https://github.com/indongyoo/NAVER-Pay-functional-js/blob/master/1/QnA.html#L52
이 코드에서는 제너레이터 없이 ES5 문법 만으로 이터레이터를 만들어서 지연평가를 구현하고 있습니다. 결과적으로 제너레이터는 이 코드의 이터레이터와 동일한 이터레이터를 반환하는 것이 목적이라고 말씀드리고 싶습니다.
감사합니다.