예지의 테크 로그포스 (Yeji's Tech Log Force)
[Design Pattern] Iterator 반복자 패턴 본문
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 |