이터러블, 이터레이터, 제너레이터의 기본 개념 요약(?)
Symbol.iterator
메서드를 가지고 있으며 이터레이터를 반환한다.for...of
와 ...
을 적용할 수 있다.next
메서드를 가지고 있고 호출 시 이터러블을 순회하며 value, done 프로퍼티를 갖는 iterator result 객체
를 반환한다. 이터러블의 각 요소를 순회하기 위한 포인터의 역할을 한다.const fibonacciFunc = function (max) {
let [pre, cur] = [0, 1];
// Symbol.iterator 메소드와 next 메소드를 소유한
// 이터러블이면서 이터레이터인 객체를 반환
return {
// Symbol.iterator 메소드
[Symbol.iterator]() {
return this;
},
// next 메소드는 이터레이터 리절트 객체를 반환
next() {
[pre, cur] = [cur, pre + cur];
return {
value: cur,
done: cur >= max
};
}
};
};
const createInfinityByIteration = function () {
let i = 0; // 자유 변수
return {
[Symbol.iterator]() { return this; },
next() {
return { value: ++i };
}
};
};
// 무한 이터러블을 생성하는 제너레이터 함수
function* createInfinityByGenerator() {
let i = 0;
while (true) { yield ++i; }
}
제너레이터 함수를 호출하면 제너레이터를 반환한다.
이 제너레이터는 Symbol.iterator 메서드를 소유한 이터러블이면서 next 메서드를 소유한 이터레이터다. 이제 이터러블, 이터레이터, 제너레이터가 뭔지는 완벽히 이해한 것 같다!! 응용해서 문제를 푸는 건 별개지만,, 그래도 강의 복습하면서 연습 문제 풀다보면 과제도 이해할 수 있을 것 같다,, 🥲