반복자 패턴(Iterator Pattern)은 배열(Array), 리스트(List), 해시맵(Map) 등 데이터가 저장된 내부 구조나 원리를 모르더라도 집합 객체 안의 모든 원소들을 통일된 방법으로 차례대로 접근(순회)할 수 있게 해주는 행위 패턴입니다.
Java의 java.util.Iterator (hasNext(), next())가 바로 이 패턴의 구현체입니다. 배열은 `for(int i=0; i표준화된 반복자 인터페이스 하나로 통일하여 클라이언트 코드를 극도로 단순하게 만듭니다.
📐 Iterator Pattern UML
반복자 패턴은 컬렉션의 내부 구조를 노출하지 않고 그 요소들을 순차적으로 접근할 수 있는 방법을 제공합니다.
class Book {
constructor(name) { this.name = name; }
}
class BookShelf {
constructor() { this.books = []; }
addBook(book) { this.books.push(book); }
getBookAt(index) { return this.books[index]; }
getLength() { return this.books.length; }
[Symbol.iterator]() {
let index = 0;
return {
next: () => {
if (index < this.books.length) return { value: this.books[index++], done: false };
else return { done: true };
}
};
}
}
const bookShelf = new BookShelf();
bookShelf.addBook(new Book("Clean Code"));
bookShelf.addBook(new Book("Design Patterns"));
bookShelf.addBook(new Book("Refactoring"));
for (const book of bookShelf) {
console.log(book.name);
}