이터레이터 패턴

2024. 6. 3. 14:26면접을 위한 cs 전공지식 노트/디자인 패턴

이터레이터 패턴

 

  • 일련의 데이터 집합에 대하여 순차적인 접근(순회)을 지원하는 패턴
  • 데이터 집합이란 객체들을 그룹으로 묶어 자료의 구조를 취하는 컬렉션을 의미
  • 별도의 이터레이터 객체를 반환받아 이를 이용해 순회하기 때문에 집합체의 내부 구조를 노출하지 않고 순회 가능

 

 

배열이나 리스트같은 경우 순서가 연속적인 데이터 집합이기 때문에 간단한 for문을 통해 순회할 수 있지만, 데이터 저장 순서가 정해지지 않고 적재되는 다른 복잡한 컬렉션들은 기준이 애매해진다. 이처럼 복잡하게 얽혀있는 자료 컬렉션들을 순회하는 알고리즘 전략을 정의하는 것을 이터레이터 패턴이라고 한다.

 

 

 

 

이터레이터 패턴 구조

 

자바의 컬렉션 프레임워크(JCF)에서 각종 컬렉션을 무리 없이 순회할 수 있는 것도 내부에 미리 이터레이터 패턴이 적용되어 있기 때문이다.

 

 

  • Aggregate (인터페이스)
    • ConcreateIterator 객체를 반환하는 인터페이스를 제공
    • iterator() : ConcreateIterator 객체를 만드는 팩토리 메서드
  • ConcreateAggregate (클래스)
    • 집합체 내의 요소들을 순서대로 검색하기 위한 인터페이스를 제공
    • hasNext() : 순회할 다음 요소가 있는지 확인 (true / false)
    • next() : 요소를 반환하고 다음 요소를 반환할 준비를 하기 위해 커서를 이동시킴
  • ConcreateIterator (클래스) : 반복자 객체
    • ConcreateAggregate가 구현한 메서드로부터 생성되며 ConcreateAggregate의 컬렉션을 참조하여 순회
    • 어떤 전략으로 순회할지에 대한 로직을 구체화한다.

 

 

 

 

이터레이터 패턴 특징

 

패턴 사용 시기

  • 컬렉션에 상관없이 객체 접근 순회 방식을 통일하고자 할 때
  • 컬렉션을 순회하는 다양한 방법을 지원하고 싶을 때
  • 컬렉션의 복잡한 내부 구조를 클라이언트로부터 숨기고 싶은 경우 (편의 + 보안)
  • 데이터 저장 컬렉션 종류가 변경 가능성이 있을 때

 

패턴 장점

  • 일관된 이터레이터 인터페이스를 사용해 여러 형태의 컬렉션에 대해 동일한 순회 방법을 제공
  • 컬렉션 내부 구조 및 순회 방식을 알지 않아도 된다.
  • 집합체의 구현과 접근하는 처리 부분을 반복자 객체로 분리해 결합도를 줄일 수 있다.
  • 순회 알고리즘을 별도의 반복자 객체에 추출하여 각 클래스의 책임을 분리하여 단일 책임 원칙을 준수한다.
  • 데이터 저장 컬렉션 종류가 변경되어도 클라이언트 구현 코드는 손상되지 않아 수정에는 닫혀있기 때문에 개방 폐쇄 원칙(OCP)을 준수한다.

 

패턴 단점

  • 클래스가 늘어나고 복잡도가 증가한다.
    • 간단한 컬렉션에서만 작동하는 경우 패턴을 적용하는 것은 복잡도만 증가시킬 수 있다.
    • 이터레이터 객체를 만드는 것이 유용한 상황인지 판단할 필요가 있다.

'면접을 위한 cs 전공지식 노트 > 디자인 패턴' 카테고리의 다른 글

MVC 패턴  (0) 2024.06.05
노출 모듈 패턴  (0) 2024.06.04
프록시 패턴과 프록시 서버  (0) 2024.05.31
옵저버 패턴  (0) 2024.05.30
전략 패턴  (0) 2024.05.29