728x90
1. Iterator 패턴
- for문의 int i를 추상적으로 일반화 한 것
- 종류
- Iterator
- 향상된 for문
- iterator를 가지고 있는 type
- 배열 : hasnext()가 없다. 대신 향상된 for문으로 사용
- Collection : 향상된 for문 사용 가능
- 직접 Iterator 패턴 구현
2. 실제 구현 코드
// github 링크
<문제점> 현재 코드가 문제가 있음 BookShelfIterator가 BookShelf를 땡겨서 쓰는 것이 아니고 BookShelf에게 시켜야된다.
<해결> 이게 과제 : 뭔가 중간에 관리해주는 친구가 필요
3. 해당 패턴 장점
- 왜 Iterator와 같이 번거로운 방식을 사용? 구현과 분리하여 반복할 수 있기 때문
- bookShelf 구현체가 변경이 되어도 while loop는 정상 동작한다.
// while loop는 bookShelf 구현체에 의존하지 않는다.
Iterator<Book> it = bookShelf.iterator();
while (it.hasNext()) {
Book book = it.next();
System.out.println(book.getName());
}
- Iterator 뿐만 아니라 앞으로 작성하는 패턴 및 개발 시, 인터페이스와 추상클래스를 사용해서 프로그래밍를 하는 습관을 들여야 한다.
- 처음에는 인터페이스로 개발하다가 공통부분이 많이 생기면 추상클래스로 변경하는 방식을 권장한다.
- 코딩에서는 배열을 웬만해선 사용하지 말라고 한다. list를 사용하는 것을 추천
- 등장인물
- Iterator: 반복자
- Concretelterator: 구체적인 반복자
- Aggregate: 집합체
- ConcreteAggregate: 구체적인 집합체
4. 관련 패턴
- Visitor 패턴
- Composite 패턴
- Factory Method 패턴