2012년 4월 20일 금요일

[Java Design Pattern_1]Iterator 설명

# Iterator - 순서대로 지정해서 처리하기

@ 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의 다양한 종류 : 뒤에서 시작해서 역방향으로 진행한다. // 정방향으로도, 역방향으로도 진행한다. 번호를 지정해서 갑자기 그곳으로 점프한다.




댓글 없음:

댓글 쓰기