이터레이터 패턴과 관련된 디자인 패턴

이터레이터 패턴은 객체의 구조와 관계없이 순차적으로 접근할 수 있는 방법을 제공하는 디자인 패턴입니다. 이 패턴은 컬렉션 요소를 노출하지 않고도 컬렉션에 접근할 수 있는 일관된 방법을 제공하여 코드의 유연성과 재사용성을 높이는 데 도움이 됩니다.

이터레이터 패턴의 구성 요소

  1. 이터레이터(Iterator): 컬렉션 내의 요소를 차례대로 접근하고 반환하는 역할을 합니다.
  2. 컬렉션(Collection): 요소들을 관리하는 역할을 합니다. 이터레이터를 생성하고 컬렉션 내의 요소에 접근할 수 있는 인터페이스를 제공합니다.

이터레이터 패턴의 활용 예시

// 이터레이터 인터페이스 정의
public interface Iterator {
    boolean hasNext();
    Object next();
}

// 컬렉션 인터페이스 정의
public interface Collection {
    Iterator createIterator();
}

// 구체적인 이터레이터 구현
public class ConcreteIterator implements Iterator {
    private Object[] elements;
    private int position = 0;

    public ConcreteIterator(Object[] elements) {
        this.elements = elements;
    }

    public boolean hasNext() {
        return position < elements.length;
    }

    public Object next() {
        return elements[position++];
    }
}

// 구체적인 컬렉션 구현
public class ConcreteCollection implements Collection {
    private Object[] elements;

    public ConcreteCollection(Object[] elements) {
        this.elements = elements;
    }

    public Iterator createIterator() {
        return new ConcreteIterator(elements);
    }
}

// 클라이언트 코드
public class Client {
    public static void main(String[] args) {
        Object[] elements = { "Apple", "Banana", "Cherry" };

        Collection collection = new ConcreteCollection(elements);
        Iterator iterator = collection.createIterator();

        while (iterator.hasNext()) {
            Object element = iterator.next();
            System.out.println(element);
        }
    }
}

위 예시에서 Iterator 인터페이스는 hasNext() 메서드로 다음 요소의 존재 여부를 확인하고, next() 메서드로 다음 요소를 반환합니다. Collection 인터페이스는 createIterator() 메서드로 해당 컬렉션에 대한 이터레이터를 생성합니다. ConcreteIterator 클래스는 Iterator 인터페이스를 구현하며, ConcreteCollection 클래스는 Collection 인터페이스를 구현합니다.

클라이언트 코드에서는 ConcreteCollection 클래스를 생성하고, 이를 토대로 Iterator 인터페이스를 이용해 컬렉션의 요소에 접근합니다.

#디자인패턴 #이터레이터패턴