Java Design Pattern - Iterator Pattern

업데이트:

Design Pattern

  • 과거의 소프트웨어 개발 과정에서 발견된 설계의 노하우를 축적하여 이름을 붙여, 이후에 재이용하기 좋은 형태로 특정의 규약을 묶어서 정리한 것이다.
  • 디자인 패턴은 알고리즘이 아니라 상황에 따라 자주 쓰이는 설계 방법을 정리한 코딩 방법론일 뿐이며 모든 상황의 해결책이 아니다.

Behavioral Patterns, 행위 패턴

  • 객체간의 상호작용과 책임을 중시하는 패턴이다.
  • 한 객체가 혼자 수행할 수 없는 작업을 여러 개의 객체로 어떻게 분배하면서 객체 사이의 결합도를 최소화하는 것에 중점을 두는 패턴이다.

Iterator Pattern

  • 컬렉션 구현 방법을 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 접근할 수 있는 방법을 제공하는 패턴이다.

Example

public interface Iterator {

  public boolean hasNext();

  public Object next();

}
public class NameIterator implements Iterator {

  String[] names;
  int index;

  public NameIterator(String[] names) {
    this.names = names;
  }

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

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

}
  • 반복 수행을 위한 Iterator 인터페이스를 정의하고, 이름에 대한 배열을 저장할 NameIterator를 구현한다.
public interface Container {

  public Iterator getIterator();

}
public class NameRepository implements Container {

  public String names[] = { "Robert", "John", "Julie", "Lora" };

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

}
  • Iterator를 가져오기 위한 Container 인터페이스를 정의하고, 이름 배열을 저장하여 NameIterator 객체로 반환하기 위한 NameRepository 클래스를 구현한다.
public class IteratorPatternMain {

  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);
    }

  }

}
  • NameRepository를 이용하여 NameIterator를 가져와서 반복 수행해본다.

Source

Sample Code는 여기에서 확인 가능합니다.

댓글남기기