이터레이터패턴은 이터레이터 (iterator)를 사용하여 컨터에너의 요소들에 접근하는 디자인 패턴
각기 다른 자료구조들을 똑같은 인터페이스로 순회를 쉽게 할 수 있다는 장점이 있다.
컨터이너란 동일한 요소들을 담아놓는 집합
배열, 맵(key : value) 등이 있음
이터레이터 패턴(Iterator Pattern)은 컬렉션(예: 배열, 리스트) 내부의 요소들에 접근하는 방법을 제공하는 디자인 패턴
이 패턴을 사용하면 컬렉션의 내부 구조를 노출하지 않고도 요소들을 순차적으로 접근할 가능
주로 데이터 구조를 순회할 때 유용하며, 컬렉션 내의 각 요소에 대해 동일한 작업을 수행할 수 있게 해줌
예를들면 array 같은 경우 index를 통해서 0번째, 1번째… 이런 식으로 찾을 수 있는데
map 같은 경우 key : value 형식으로 되어있어 value를 찾기 위해서는 모든 key값을 탐색해야 하는 불편함이 있음
그런 경우 이터레이터를 통해 쉽게 탐색이 가능 함
hasNext(), next(), remove()와 같은 메서드를 포함createIterator()와 같은 메서드를 포함이터레이터 패턴의 핵심은 next() 메서드를 가진 객체입니다. 이 객체는 done과 value 속성을 가진 객체를 반환함
done은 이터레이션이 끝났는지를 나타내고, value는 현재 값을 나타냄
javascript코드 복사
// 컬렉션 클래스
class ConcreteCollection {
constructor() {
this.items = [];
}
addItem(item) {
this.items.push(item);
}
createIterator() {
return new ConcreteIterator(this.items);
}
}
// 이터레이터 클래스
class ConcreteIterator {
constructor(collection) {
this.collection = collection;
this.position = 0;
}
next() {
if (this.position < this.collection.length) {
return { value: this.collection[this.position++], done: false };
} else {
return { done: true };
}
}
}
// 사용 예시
const collection = new ConcreteCollection();
collection.addItem("Item 1");
collection.addItem("Item 2");
collection.addItem("Item 3");
const iterator = collection.createIterator();
let result = iterator.next();
while (!result.done) {
console.log(result.value);
result = iterator.next();
}