[행위 패턴] Iterator pattern (이터레이터 패턴)

 

(원본출처 https://www.tutorialspoint.com/design_pattern/design_pattern_quick_guide.htm)


 

컬렉션이어떤 식으로 구현되었는지 드러내진 않으면서도 컬렉션 내에 있는 모든 객체에 대해 반복 작업을 처리할 수 있게 한다.

 

반복자 패턴은 Java 및 .Net 프로그래밍 환경에서 매우 일반적으로 사용되는 디자인 패턴입니다.

이 패턴은 기본 표현을 알 필요없이 순차 방식으로 컬렉션 객체의 요소에 액세스하는 방법을 얻는 데 사용됩니다.

반복자 패턴은 행동 패턴에 속합니다.

 

Implementation

우리는 네비게이션 메소드를 설명하는 Iterator 인터페이스와 이터레이터를 다시 실행하는 Container 인터페이스를 생성 할 것입니다. Container 인터페이스를 구현하는 구체적인 클래스는 Iterator 인터페이스를 구현하고 사용하는 책임이 있습니다.

IteratorPatternDemo, 우리 데모 클래스는 NamesRepository를 사용하여 NamesRepository에서 컬렉션으로 저장된 Names을 인쇄하는 데 필요한 구체적인 클래스 구현을 제공합니다.

Iterator Pattern UML Diagram

Step 1

인터페이스를 만듭니다.

Iterator.java

public interface Iterator {
   public boolean hasNext();
   public Object next();
}

Container.java

public interface Container {
   public Iterator getIterator();
}

Step 2

컨테이너 인터페이스를 구현하는 구체적인 클래스를 만듭니다. 이 클래스에는, Iterator 인터페이스를 구현하는 내부 클래스 NameIterator가 있습니다.

NameRepository.java

public class NameRepository implements Container {
   public String names[] = {"Robert" , "John" ,"Julie" , "Lora"};

   @Override
   public Iterator getIterator() {
      return new NameIterator();
   }

   private class NameIterator implements Iterator {

      int index;

      @Override
      public boolean hasNext() {
         if(index < names.length){
            return true;
         }
         return false;
      }

      @Override
      public Object next() {
         if(this.hasNext()){
            return names[index++];
         }
         return null;
      }		
   }
}

Step 3

NameRepository를 사용하여 반복자와 인쇄 이름을 가져옵니다.

IteratorPatternDemo.java

public class IteratorPatternDemo {
	
   public static void main(String[] args) {
      NameRepository namesRepository = new NameRepository();

      for(Iterator iter = namesRepository.getIterator(); iter.hasNext();){
         String name = (String)iter.next();
         System.out.println("Name : " + name);
      } 	
   }
}

Step 4

결과를 확인합니다.

Name : Robert
Name : John
Name : Julie
Name : Lora
Posted by kunoo
,