개발 - 고급/Design Pattern

1. Iterator - 처리를 반복한다.

wooweee 2023. 10. 28. 12:32
728x90

1. Iterator 패턴

  • for문의 int i를 추상적으로 일반화 한 것
  • 종류
    1. Iterator
    2. 향상된 for문
  • iterator를 가지고 있는 type
    1. 배열 : hasnext()가 없다. 대신 향상된 for문으로 사용
    2. Collection : 향상된 for문 사용 가능
    3. 직접 Iterator 패턴 구현

 

2. 실제 구현 코드

// github 링크

<문제점> 현재 코드가 문제가 있음 BookShelfIterator가 BookShelf를 땡겨서 쓰는 것이 아니고 BookShelf에게 시켜야된다.

<해결> 이게 과제 : 뭔가 중간에 관리해주는 친구가 필요

 

3. 해당 패턴 장점

  • 왜 Iterator와 같이 번거로운 방식을 사용? 구현과 분리하여 반복할 수 있기 때문
  • bookShelf 구현체가 변경이 되어도 while loop는 정상 동작한다.
// while loop는 bookShelf 구현체에 의존하지 않는다.
Iterator<Book> it = bookShelf.iterator();
while (it.hasNext()) {
    Book book = it.next();
    System.out.println(book.getName());
}

 

  • Iterator 뿐만 아니라 앞으로 작성하는 패턴 및 개발 시, 인터페이스와 추상클래스를 사용해서 프로그래밍를 하는 습관을 들여야 한다.
  • 처음에는 인터페이스로 개발하다가 공통부분이 많이 생기면 추상클래스로 변경하는 방식을 권장한다.
  • 코딩에서는 배열을 웬만해선 사용하지 말라고 한다. list를 사용하는 것을 추천

 

  • 등장인물
    • Iterator: 반복자
    • Concretelterator: 구체적인 반복자
    • Aggregate: 집합체
    • ConcreteAggregate: 구체적인 집합체

 

4. 관련 패턴

  • Visitor 패턴
  • Composite 패턴
  • Factory Method 패턴