Search
moon
sun
🔁

Iterator pattern(반복자 패턴)

💡
반복 패턴이란? 위키백과
객체 지향 프로그래밍에서 반복자를 사용하여 컨테이너를 가로지르며 컨테이너의 요소들에 접근하는 디자인 패턴이다. 반복자 패턴은 컨테이너로부터 알고리즘을 분리시키며, 일부의 경우 알고리즘들은 필수적으로 컨테이너에 특화되어 있기 때문에 분리가 불가능하다. 특징
•
반복해야 하는 부분을 분리하고 일반화 시킨다.
😅
만약 아래와 같은 슈퍼 프린터를 만든다고 가정해보자. 이 슈퍼 프린터는 아래와 같이 A4용지 한 장 분량의 자료를 넣기만 하면 한줄한줄 출력해준다.
😅
하지만 아주 큰 문제가 있다. 실제 종이를 넣을 때와 PDF(전자 문서)를 넣을 때 반복하는 방법이 다음과 같이 달라진다.

반복자 패턴을 적용한 후

💡
이렇게 기존에는 종이를 읽는 방식과 PDF를 읽는 방식이 달랐다. 그래서 PDF의 경우 USB에 저장 후 슈퍼 프린터에 자료를 넣어줘야 했다. 하지만 이제는 Iterator라는 하나의 인터페이스로 종이, PDF의 자료를 읽는 방식을 통일 시켰다. 그 덕분에 USB포트도 제거할 수 있었다.
Iterator 적용 전
Iterator 적용 후

상황은 늘 바뀐다.

💡
만약 책과 PDF로 된 전자책이라면 어떨까? Iterator를 적용하기 전처럼 변할 것이다. 왜냐하면 책은 종이들의 집합이고, PDF 책은 PDF들의 집합이기 때문이다. 하지만 동일하게 Iterator를 적용하면 간단하게 해결할 수 있다. (여기서 책의 의미는 종이가 여러 장 들어오거나, PDF가 여러 장 들어올 때 이다. 이를 일반화 시켜 사용하는 방법이다. 꼭 종이, PDF가 아니더라도 xml, yml 등도 book 인터페이스만 구현하면 자유롭게 출력이 가능해진다.)
Iterator 적용 후

반복자 패턴 이해하기

💡
반복 패턴이란? 위키백과
객체 지향 프로그래밍에서 반복자를 사용하여 컨테이너를 가로지르며 컨테이너의 요소들에 접근하는 디자인 패턴이다. 반복자 패턴은 컨테이너로부터 알고리즘을 분리시키며, 일부의 경우 알고리즘들은 필수적으로 컨테이너에 특화되어 있기 때문에 분리가 불가능하다.
❗반복해야 할 집합의 반복 알고리즘이 다를 때 동일한 방법(next 등)으로 호출할 수 있게 일반화 시키는 거구나. 특징
•
반복해야 하는 부분을 분리하고 일반화 시킨다.
❗Iterator를 특정 집합에 구현해서 반복을 사용해야 하는 코드 즉, 클라이언트에서는 Iterator만 사용하는 거구나.
Iterator - Iterator 인터페이스
concreteIterator - PaperIterator, PDFIterator
concreteAggregate - Paper, PDF
Aggregate - Book 인터페이스