반복 패턴이란?
위키백과
객체 지향 프로그래밍에서 반복자를 사용하여 컨테이너를 가로지르며 컨테이너의 요소들에 접근하는 디자인 패턴이다. 반복자 패턴은 컨테이너로부터 알고리즘을 분리시키며, 일부의 경우 알고리즘들은 필수적으로 컨테이너에 특화되어 있기 때문에 분리가 불가능하다.
특징
•
반복해야 하는 부분을 분리하고 일반화 시킨다.
만약 아래와 같은 슈퍼 프린터를 만든다고 가정해보자. 이 슈퍼 프린터는 아래와 같이 A4용지 한 장 분량의 자료를 넣기만 하면 한줄한줄 출력해준다.
하지만 아주 큰 문제가 있다. 실제 종이를 넣을 때와 PDF(전자 문서)를 넣을 때 반복하는 방법이 다음과 같이 달라진다.
반복자 패턴을 적용한 후
이렇게 기존에는 종이를 읽는 방식과 PDF를 읽는 방식이 달랐다. 그래서 PDF의 경우 USB에 저장 후 슈퍼 프린터에 자료를 넣어줘야 했다. 하지만 이제는 Iterator라는 하나의 인터페이스로 종이, PDF의 자료를 읽는 방식을 통일 시켰다. 그 덕분에 USB포트도 제거할 수 있었다.
Iterator 적용 전
Iterator 적용 후
상황은 늘 바뀐다.
만약 책과 PDF로 된 전자책이라면 어떨까? Iterator를 적용하기 전처럼 변할 것이다. 왜냐하면 책은 종이들의 집합이고, PDF 책은 PDF들의 집합이기 때문이다. 하지만 동일하게 Iterator를 적용하면 간단하게 해결할 수 있다. (여기서 책의 의미는 종이가 여러 장 들어오거나, PDF가 여러 장 들어올 때 이다. 이를 일반화 시켜 사용하는 방법이다. 꼭 종이, PDF가 아니더라도 xml, yml 등도 book 인터페이스만 구현하면 자유롭게 출력이 가능해진다.)
Iterator 적용 후
반복자 패턴 이해하기
반복 패턴이란?
위키백과
객체 지향 프로그래밍에서 반복자를 사용하여 컨테이너를 가로지르며 컨테이너의 요소들에 접근하는 디자인 패턴이다. 반복자 패턴은 컨테이너로부터 알고리즘을 분리시키며, 일부의 경우 알고리즘들은 필수적으로 컨테이너에 특화되어 있기 때문에 분리가 불가능하다.
•
반복해야 하는 부분을 분리하고 일반화 시킨다.
Iterator - Iterator 인터페이스
concreteIterator - PaperIterator, PDFIterator
concreteAggregate - Paper, PDF
Aggregate - Book 인터페이스