@ Iterator 패턴이란, 무엇인가 많이 모여있는 것들을 순서대로 지정하면서 전체를 검색하는 처리를 실행하기 위한 것입니다.
@예제
- Aggregate(집합체) : 집합체를 나타내는 인터페이스
=> 선언되어 있는 메소드는 iterator 메소드 하나뿐 집합체에 대응하는 Iterator를 1개 작성하기 위한 것입니다. 집합체를 하나씩 나열하고, 검색하고, 조사하고 싶을 때에는 iterator 메소드를 사용해서 Iterator 인터페이스를 구현한 클래스의 인스턴스를 1개 만듭니다.
- BookShelf(구체적인 집합체) : 서가를 나타내는 클래스
=> Aggregate 인터페이스로 구현(책 객체 집합을 가진 집합체)
- Iterator(반복자) : 하나씩 나열하면서 검색을 실행하는 인터페이스
=> 다음 요소가 존재하는지, 다음요소를 가져오는 메서드
- BookShelfIterator(구체적인 반복자) : 서가를 검색하는 클래스
=> Iterator 인터페이스를 구현하는 클래스 , 생성자에서 검색할 객체를 등록하고, 인덱스를 0으로 만든다.
- Book : 책을 나타내는 클래스
- Main : 동작 테스트용 클래스
@Why ?
- 구현에 상관없이 Iterator를 사용할 수 있다.
while (it.haSNext ()) {
Book book (Book) it.next () ;
System.out. println(book.getName()) ;
}
위의 코드의 while 루프는 BookShelf의 구현에는 의존하지 않습니다. BookShelf가 Vector 나 ArrayList나 상관없이 올바른 Iterator를 반환하면 루프는 전혀 변경하지 않아도 동작합니다.
- 디자인 패턴은 클래스의 재 이용화를 촉진합니다. 재이용화를 촉진한다는 것은 클래스를 부품처럼 사용할 수 있게 하고, 하나의 부품을 수정해도 다른 부품에는 큰 영향 없이 적은 수정만으로 끝낼 수 있다는 것을 의미합니다.
- 추상 클래스 ? 인터페이스 ? : 구체적인 클래스만 사용하면 클래스 간의 결합이 강해져서, 부품으로 재 이용하는 일이 어렵습니다. 결합을 약하게 해서 부품으로 재이용하기 쉽도록 하기 위해 추상 클래스나 인터페이스가 도입니다.
- 복수의 Iterator : 하나씩 나열하는 구조가 Aggregate 역할의 외부에 놓여있다.라는 것은 Iterator 패턴의 특징 중 하나입니다. 이 특징으로 인해 하나의 ConcreteAggregate 역할에 대해서 복수의 ConcreteIterator 역할을 만들 수 있습니다.
- Iterator의 다양한 종류 : 뒤에서 시작해서 역방향으로 진행한다. // 정방향으로도, 역방향으로도 진행한다. 번호를 지정해서 갑자기 그곳으로 점프한다.
댓글 없음:
댓글 쓰기