예지의 개발 로그포스 (Yeji's Log Force)

[Design Pattern] Iterator 반복자 패턴 본문

CS/Design Pattern

[Design Pattern] Iterator 반복자 패턴

Yeji Heo 2023. 1. 29. 19:09

https://www.youtube.com/watch?v=T3sXKtlr0Ow&list=PLe6NQuuFBu7FhPfxkjDd2cWnTy2y_w_jZ&index=2 

 

Container / Aggregator: 동일한 형태의 데이터를 여러 개 지닌 것

그 예시로는 Array, Linked List, Tree, Graph, Table(DBMS) 등이 있다.

 

1. Iterator의 개념

이 데이터들을 가져오는 방법은 Aggregator의 종류에 따라 모두 다르기 때문에 이를 통일된 방법으로 가져오도록 돕는 것이 Iterator pattern이다.

다양한 형태의 Aggregator의 데이터에 접근할 때에 표준화 된 공통API.

한편으로는 Aggregator의 자료구조를 노출하지 않아도(혹은 몰라도) 내부 데이터에 접근할 수 있는 방법인 것이다.

 

2. for-each반복문과의 차이점

Iterator는 마치 for-each처럼 데이터를 순차적으로 가져온다. 

다만 for-each는 데이터를 수정할 수 없고, Iterator는 있다고 한다.

그러나 Iterator는 항상 Iterator 타입 변수를 생성하고 초기화해야 하므로 for-each보다 코드가 길고 가독성이 떨어진다.

따라서 데이터를 읽기만 한다면 for-each를 사용하는 것이 좋겠다.

또 for-each는 모든 데이터를 탐색한다. 원하는 부분만 탐색할 수 없다.

 

3. Iterator와 Iterable

둘다 Aggregator의 데이터에 순차적으로 접근하는 객체이지만 차이점이 있다.

Iterator가 Iterable에 속한다. 즉 Iterator는 Iterable이지만, Iterable은 Iterator가 아닐 수도 있다.(자바에서 Iterable 인터페이스에는 Iterator 추상메소드도 선언되어있다.)

Iterator를 만드는 메서드를 제공하는 것이 Iterable(혹은 Aggregate)

 

'CS > Design Pattern' 카테고리의 다른 글

[Design Pattern] GoF 디자인 패턴 개념 간단 정리  (0) 2023.03.01
[Design Pattern] 시작하기  (0) 2023.01.29
Comments