sharingStorage

Iterator Pattern 본문

디자인패턴

Iterator Pattern

Anstrengung 2021. 12. 29. 10:40

Iterator Pattern(반복자 패턴)

컬렉션 구현방법을 노출시키지 않으면서 그 집합체 안에 들어있는 모든 항목에 접근할 수 있게 해주는 방법을 제공해주는 패턴

 

접근기능과 자료구조를 분리시켜서 객체화합니다. 서로 다른 구조를 가지고 있는 저장 객체에 대해서 접근하기 위해서 interface를 통일시키고 싶을 때 사용하는 패턴.

 

저장소의 종류와는 상관없이 동일한 READ 방식을 제공하는 행위 패턴.

 

 

목적

서로 다른 구조를 가지고 있는 저장 객체에 대해서 접근하기 용이하며 객체 내부의 정보를 알필요 없게 해줍니다.

 

 

 

 

유용성

내부구현을 노출시키지 않으면서 집약 객체의 내용물에 접근하고자 할 때

 

집약 객체들에 대해 다양한 traversals를 지원하고자 할 때

 

다른 집약(집합)구조들을 탐색하기 위한 통일된 인터페이스를 제공하고자 할 때

(다형적 iteration을 지원)

 

object가 어떤식으로 구현이 되어있는지 알 필요가 없으므로 object의 구현부를 노출시키지 않을 수 있다

 

모든 항목에 일일이 접근하는 작업을 컬렉션 객체가 아닌 이터레이터 객체에서 맡게 된다. 이렇게 하면, 집합체의 인터페이스 및 구현이 간단해질 뿐만 아니라, 집합체에서는 반복 작업에서 손을 떼고 원래 자신이 할 일에만 전념할 수 있다.

 

구조 및 역할

Iterator 패턴 구조

반복자 (iterator) : 요소를 순서대로 검색해가는 인터페이스를 결정

다음 요소가 존재하는지를 얻기위한 hasNext()와 다음 요소를 얻기 위한 next()를 결정합니다.

 

구체적인 반복자(concrete Iterator) : 반복자가 결정한 인터페이스를 실제로 구현

 

집합체 (Aggregate) : 반복자 역할을 만들어내는 인터페이스를 결정

이 인터페이스는 '내가 가지고 있는 요소를 순서대로 검색해 주는 사람'을 만들어 내는 메소드 입니다.

 

구체적인 집합체 (Concrete Aggregate) : 집합체 역할이 결정한 인터페이스를 실제로 구현

 

 

 

 

 Iterator : JAVA API

java.util package에 포함되는 Interface이다.

public interface Iterator<E>

 

Iterator Method

 

   boolean hasNext()

iteration이 요소를 더 가지고 있으면 true 아닐시 false를 반환

 

   E next()

iteration의 다음 요소를 반환

 

Throws: (예외를 던지는 것 ): 현재메서드에서 상위 메소드로 예외를 던진다

NoSuchElementException -  iteration이 더 이상 요소를 가지고있지 않다면

 

 

   void remove()

iterator에 의해 반환된 가장 최근 요소 삭제 (next()가 한번이라도 불려져야 사용가능 )

 

Throws:

UnsupportedOperationException - if the remove operation is not supported by this iterator (Iterator가 제거작업을 지원하지 않을 때??)

IllegalStateException - if the next method has not yet been called, or the remove method has already been called after the last call to the next method

(다음 메소드가 아직 호출되지 않았거나 다음 메소드에 대한 마지막 호출 후에 remove 메소드가 이미 호출된 경우)

 

참고자료:

http://www.incodom.kr/%EC%9D%B4%ED%84%B0%EB%A0%88%EC%9D%B4%ED%84%B0_%ED%8C%A8%ED%84%B4#h_d4fa504137aa7f0826b73797e7611eaa

http://www.gisdeveloper.co.kr/?p=10362   

https://lktprogrammer.tistory.com/40     

 

참고서적:

JAVA 객체지향 디자인 패턴:UML과 GoF 디자인 패턴 핵심 10가지로 배우는

'디자인패턴' 카테고리의 다른 글

Observer Pattern  (1) 2021.12.29
Comments