1. Iterator란?

자바의 Collection에 저장되어 있는 요소들을 순회하는 인터페이스.

2. Iterator 사용법

1) 정의방법

Iterator<T> iterator = Collection.iterator();

2) Iterator 메서드 종류

image

  • hasNext() : 다음 요소가 있는지 판단
  • next() : 다음 요소를 가져옴
  • remove() : 가져온 요소를 삭제

3) 예시 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class IteratorTest {
 
    public static void main(String[] args) {
        
        List<Integer> list = new ArrayList<Integer>();
 
        for(int i = 0;i <= 100; i++) {
            list.add(i);
        }
        
        Iterator<Integer> iter = list.iterator();
        
        while(iter.hasNext()) {
            int data = iter.next();
            System.out.print(data);
        }
        
    }
    
}

3. Iterator과 반복문

1
2
3
for(int i = 0; i<= 100; i++) {
        list.get(i);
}

1) 반복문

  • get(0)부터 get(100)까지를 수행하게 될 때, 0부터 100까지 총 101번의 요소를 조회하는 것이 아님.
  • get(int index) 메서드는 시작 주소부터 index 만큼 요소들을 밟아가며 조회하는 메서드이기 때문.
  • 만약 5번째 값을 조회한다면 처음 시작주소부터 시작하여 다음주소를 타고… 타고.. 를 총 5번 반복해야 함.
    get 메서드가 실행되며 i 값이 증가할 때마다 메모리적으로 조회해야 하는 요소는 1번, 2번, 3번, 4번… 101번까지 증가하는 것 = 총 5151번을 조회해야 함.

2) Iterator

  • Iterator는 1부터 101번째까지의 요소에 대해 내부적으로 객체로 생성한 후 순차적으로 조회함.
  • 처음 주소로 돌아갈 필요가 없기때문에 next 메서드를 통해 조회 시 요소의 개수인 101번만 조회를 하게됨.

* 속도 차이

Iterator를 구현하기 위해 객체를 생성하는 부분에서 시간이 더 걸리기 때문에 반복문보다 속도면에서 조금 불리.

4. 사용 이유

  • Collection 프레임워크에 대해 공통으로 사용이 가능함.
    ⇒ 컬렉션 종류에 관계없이 일관성 있게 프로그래밍할 수 있음.
    ⇒ 소스 코드에 어떠한 컬렉션을 사용할지 정해지지 않았지만 컬렉션 내에 보관한 모든 내용을 출력하는 등의 작업을 먼저 하길 원한다면 Iterator를 사용하는 것은 좋은 선택.
  • 사용법이 간단함.

References