- iterator 패턴은 for문을 추상화 한 패턴으로 무언가를 반복하여 순서대로 처리하는 경우 사용된다.
장점
- 하나씩 꺼내서 처리하는 과정을 구현과 분리할 수 있다.
- 컬렉션 구현 방법을 노출시키지 않으면서 그 집합체 안에 있는 항목에 접근할 수 있게 해준다.
단점
- 간단한 구현을 iterator 패턴으로 구현하면 지나치게 설계가 복잡해지는 경우가 있다.
구성
- iterator(반복자) -> 요소를 순서대로 검색하는 인터페이스를 결정(hasNext, next)
- Concretelterator(구체적인 반복자) -> iterator가 결정한 인터페이스를 구현하는 부분, 검색하기 위해 필요한 정보를 가지고 있어야 한다.
- Aggregate(집합체) -> iterator 역할을 만드는 인터페이스를 결정한다.
- ConcreteAggregate(구체적인 집합체) -> Aggregate역할이 결정한 인터페이스를 실제로 구현한다.
example
class Iterator {
constructor(el) {
this.index = 0;
this.elements = el;
}
next() {
const value = this.elements[this.index++];
const done = this.hasNext();
return {
value,
done,
}
}
hasNext() {
return this.index < this.elements.length;
}
}
export default Iterator;
참고자료
https://flowergeoji.me/javascript/javascript---iterator-pattern/