이터레이터(Iterator) 패턴

이터레이터 패턴은 컨테이너 객체의 요소에 순차적으로 접근하는 데 사용되는 디자인 패턴입니다. 이 패턴은 컨테이너 객체의 내부 구현을 노출시키지 않고도 컨테이너 객체의 요소에 접근할 수 있도록 합니다.

구성 요소

구현:

  1. Iterator 인터페이스를 정의합니다.
  2. Iterator 클래스를 생성하고 Iterator 인터페이스를 구현합니다.
  3. next() 메서드를 구현하여 컨테이너의 다음 요소를 반환합니다.
  4. hasNext() 메서드를 구현하여 컨테이너에 다음 요소가 있는지 여부를 확인합니다.
  5. 컨테이너 클래스에서 iterator() 메서드를 제공하여 이터레이터를 생성합니다.

장점

단점

예시

Post 목록을 가지고 있는 Board에서 최신 Post 목록을 순회해야한다.

Iterator

java.util.Iterator

Aggregate

public class Board {

    List<Post> posts = new ArrayList<>();

    public List<Post> getPosts() {
        return posts;
    }

    public void setPosts(List<Post> posts) {
        this.posts = posts;
    }

    public void addPost(String content) {
        this.posts.add(new Post(content));
    }

    public Iterator<Post> getIterator() {
        return posts.iterator();
    }

    public Iterator<Post> getRecentIterator() {
        posts.sort((p1, p2) -> p2.getCreatedDateTime().compareTo(p1.getCreatedDateTime()));
        return posts.iterator();

    }
}

Client

class BoardTest {

    @Test
    public void board_test() {
        Board board = new Board();
        board.addPost("디자인 패턴 게임");
        board.addPost("선생님, 저랑 디자인 패턴 하나 학습하시겠습니까?");
        board.addPost("지금 이 자리에 계신 여러분들은 모두 디자인 패턴을 학습하고 계신 분들입니다.");

        // 가장 최신 글 먼저 순회하기
        Iterator<Post> recentIterator = board.getRecentIterator();
        recentIterator.forEachRemaining(p-> System.out.println(p.getTitle()));
    }

}

결론

이터레이터 패턴은 컨테이너 객체의 요소에 순차적으로 접근하는 데 유용한 디자인 패턴입니다. 컨테이너 객체의 내부 구현을 노출시키지 않고도 컨테이너 객체의 요소에 접근할 수 있습니다. 그러나 이터레이터 클래스 추가로 인한 성능 저하와 코드 복잡성에 주의해야 합니다.

예제는 이곳 에서 확인하실수 있습니다.