Iterator Interface
Collection을 반복하기 위해서 Iterator Interface의 구현체를 통해 만들어낸 객체이다.
Iterator 는 생성자를 가지지 않는다.
Iterator 객체는 new 키워드와 함께, 생성자를 사용해서 만들어 낼 수 없다. Iterator는 생성자를 가지지 않기 때문이다.
사실 이는 당연한 것이, Iterator는 Class가 아니라 Interface이기 때문이다. Interface는 인스턴스화 될 수 없다.
Iterator 객체는 iterator() 메소드를 사용해서 생성할 수 있다.
'iterator()'메소드는 Collections Framework의 제일 최상위 인터페이스인 'Iterable' 인터페이스에서 정의된다.
Collection, 그 이후 List, Set등의 인터페이스가 Iterable을 상속하고, 이들의 구현체(HashSet, ArrayList등)의 인스턴스를 통해서 iterator()메소드를 호출해 iterator 객체를 생성할 수 있다.
그리고 별도의 인터페이스인 Iterator 인터페이스에서는 Iterator 객체가 가져야할 추상메소드들을 제공한다. 이 메소드들도 각 구현체에서 구현체의 자료구조 특성에 맞게 구현된다.
To summarize..
- Iterator는 class가 아니다. Interface이다. 따라서 생성자가 없다.
- Iterator 객체를 생성하기 위해서는 iterator() 메소드를 사용해야한다. 이는 Iterable 인터페이스에서 제공된다. Iterable 인터페이스를 상속하는 여러 인터페이스들이 있고, 이를 최종적으로 구현하는 구현체(HashSet, ArrayList등)에서 iterator() 메소드가 구현된다.
- 한편 Iterator 인터페이스는 Iterator 객체가 가져야하는 추상메소드를 제공한다. 이들의 구체적인 구현 또한 HashSet등의 구현체에서 이루어진다.
ref.