[TIL] 8/13
이터러블, 이터레이터, 제너레이터의 기본 개념 요약(?)
iterable
- 말그대로 반복 가능한 객체이다.
- 이터러블 프로토콜을 준수하는 객체는
Symbol.iterator
메서드를 가지고 있으며 이터레이터를 반환한다. - 이터러블은
for...of
와...
을 적용할 수 있다.
iterator
next
메서드를 가지고 있고 호출 시 이터러블을 순회하며 value, done 프로퍼티를 갖는iterator result 객체
를 반환한다. 이터러블의 각 요소를 순회하기 위한 포인터의 역할을 한다.
이터러블이면서 이터레이터인 객체?!
- 이터러블의 Symbol.iterator를 소유하고, 이터레이터의 next를 소유한다!
- Symbol.iterator는 next를 가지고 있는 자기 자신 = 이터레이터를 반환한다.
- 당연히 for...of, ... 사용이 가능하다!
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
};
}
};
};
generator
- 이터러블을 생성하는 함수
- 이터레이션 프로토콜을 준수해 이터러블을 생성하는 방식보다 간편하게 구현 가능
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 메서드를 소유한 이터레이터다.- 코드 블록이 한 번에 실행되지 않고 실행을 일시 중지했다가 필요한 시점에 재시작한다.
- next()를 호출하면 가장 가까운 yield문을 만날 때까지 실행되다가 만나면 실행 중단하고 value를 반환한다.
마무리
이제 이터러블, 이터레이터, 제너레이터가 뭔지는 완벽히 이해한 것 같다!! 응용해서 문제를 푸는 건 별개지만,, 그래도 강의 복습하면서 연습 문제 풀다보면 과제도 이해할 수 있을 것 같다,, 🥲
출처
Author And Source
이 문제에 관하여([TIL] 8/13), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kyaeim/TIL-813저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)