개발/디자인패턴

Iterator 패턴

Caffeine Developer 2023. 7. 19. 21:47
반응형

Iterator 패턴

JAVA 언어로 배우는 디자인 패턴 입문 3판 을 읽고 정리한 내용입니다.

 

Intro

Java 언어에서 배열의 모든 요소를 표시하려면 다음과 같이 for문을 사용합니다.

int[] arr = {1, 2, 3, 4, 5};
for(int i=0; i<arr.length; i++>) {
    System.out.println(arr[i]);
}

// 결과
// 1
// 2
// 3
// 4
// 5

여기서 변수 i는 0부터 시작하여 하나씩 증가시키면, 현재 주목하는 요소는 '다음', '그 다음'으로 차례차례 진행됩니다. 배열의 길이-1 까지 i가 증가하기 때문에 위의 for 문에서는 모든 배열을 탐색하게 됩니다.
여기서 i의 역할을 추상화하여 일반화한 것을 디자인 패턴에서는 Iterator 패턴이라고 합니다.

Iterator 패턴은 무언가 많이 모여 있을 때 이를 순서대로 가리키며 전체를 검색하고 처리를 반복하는 것입니다.

 

Iterator 패턴 예제 코드 클래스 다이어그램

위 클래스들의 코드는  https://github.com/DevCHW/TIL/tree/main/CS/design-pattern/Iterator에서 확인하실 수 있습니다.

 

Iterator 패턴을 사용하는 이유

배열이면 for문으로 빙글빙글 돌리면 되는데 왜 집합체 외부에 Iterator같은 것을 만들어서 번거롭게 구현할까요?

가장 큰 이유는 Iterator를 사용하여 구현과 분리 하여 반복할 수 있기 때문입니다.

while(iteraor.hasNext) {
    Book book = iteraor.next();
    System.out.println(book.getName());
}

이 코드에서는 BookShelf 구현에 사용된 메소드는 호출되지 않습니다.
위의 반복문에서는 BookShelf 구현에 의존하지 않는다는 뜻

만약에 BookShelf를 구현한 사람이 배열 대신에 ArrayList를 사용하는것으로 변경하여도, BookShelf가 iterator 메소드를 가지고 있고 올바른 Iteraor<Book>을 반환하기만 한다면 위의 while 루프는 변경하지 않아도 동작하게 됩니다.

 

관련 패턴

  • Visitor 패턴
  • Composite 패턴
  • Factory Method 패턴
반응형