Iterator 패턴이란?
원소를 순서대로 하나씩 끄집어 내어 전체를 처리하는 패턴
for문에서의 변수 i의 기능을 추상화+일반화 했다고 보면 됨
== 순회(traverse)
예제
책장에 책을 넣은 후-> 순서대로 하나씩 다시 끄집어내어 책 이름을 표시하는 program
책꽃이가, 자신이 가지고 있는 책들을 순회할 iterator(반복자)를 생성해서 반환함
Iterable<E>
집합체를 나타내는 interface (java.lang)
iterator(): BookShelf에서 Iterator<E> 생성하기 위한 abstract method
Iterator<E>
처리반복자를 나타내는 interface (java.util)
Book
책을 나타내는 class
client program
BookShelf
책장을 나타내는 class
client program
Iterable<Book> interface를 구현함
books: Book의 배열(책장에 꽂혀있는 책리스트), private 선언자로 외부에서 변경 불가. 배열크기는 생성자 호출시 지정됨
iterator(): BookShelfIterator 생성
Iterator it = bookshelf.iterator();
+ 배열생성시 c++ 과 java의 차이
int n = 5;
int arr[n]; // c++ 불가, java 가능
int arr[5]; // c++,java 모두 가능
+배열생성시 메모리 구조
String, class 객체 등을 배열안에 넣을때는,
객체 자체를 배열에 넣는게 아니라, Heap에 생성된 배열의 주소를 저장함.(참조값,reference)
BookShelfIterator
책장을 순회하는 class
client program
Iterator<Book> interface를 구현함
BookShelf field: BookShelfIterator가 검색한 책장을 가리킴(생성자에서 BookShelf 객체를 넘겨받음)
Main
동작 테스트용 class
확장 for문은 내부적으로 Iterator를 사용하므로,
Iterable interface를 implement한 class만 사용할 수 있다.
for (Book book: bookShelf) { // 확장 for문에는 Iterable interface를 implement한 class만 가능
System.out.println(book.getName());
}
BookShelf의 iterator 메서드와 BookShelfIterator 생성자의 관계
- 생성(Creation): BookShelf는 Iterable<Book> 인터페이스를 구현하며, iterator() 메서드를 통해 자신을 순회할 전용 반복자인 BookShelfIterator 객체를 생성하여 반환합니다.
- 참조 전달(this): iterator() 메서드는 new BookShelfIterator(this)와 같이 this 키워드를 사용하여 자기 자신의 인스턴스를 생성자에 전달합니다.
- 초기화: BookShelfIterator의 생성자는 전달받은 집합체(BookShelf)를 필드에 저장하여, 이후 hasNext()나 next() 메서드가 호출될 때 해당 집합체의 데이터에 접근할 수 있도록 준비합니다.
'복습 > 소프트웨어디자인패턴' 카테고리의 다른 글
| Singleton 패턴 (0) | 2026.04.17 |
|---|---|
| Factory Method 패턴 (1) | 2026.04.17 |
| Template Method 패턴 (0) | 2026.04.17 |
| Adapter 패턴 (0) | 2026.04.17 |
| 디자인패턴 (기초,uml) (0) | 2026.04.17 |