자바의 정석을 통해 공부한 내용을 요약하였습니다.
Iterator
public interface Iterator {
boolean hasNext();
Object next();
void remove();
}
public interface Collection{
public Iterator iterator();
}
1. 특징
- 컬렉션에 저장된 요소를 접근하는데 사용되는 인터페이스이다.
- 컬렉션에 저장된 요소를 일겅오는 방법을 표준화하였다.
- Collection 인터페이스에는 Iterator를 반환하는 iterator() 메서드를 정의하고 있다.
- List와 Set은 Collection 인터페이스의 자손이므로 iterator()메서드가 각 컬렉션의 특징에 맞게 작성되어 있다.
2. 메서드
- boolean hasNext() - 읽어 올 요소가 남아있는지 확인
- Object next() - 다음 요소를 읽어옴
3. 사용법
Collection c = new ArrayList();
Iterator it = c.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
- Collection인터페이스를 구현한 다른 컬렉션 클래스에 대해서도 ArrayList대신 동일한 코드를 사용할 수 있다.
- Iterator를 이용해서 컬렉션의 요소를 읽어오는 방법을 표준화했기 때문에 코드의 재사용성을 높이는 것이 가능하다.
- 자손 클래스의 멤버를 사용하는 것이 아니라면 부모 클래스 타입으로 참조변수를 선언하는 것이 좋다.
- 자손 클래스의 멤버를 사용하지 않았음에도 자손 클래스 타입으로 참조변수를 선언하게 된다면 선언문 이후의 문장들을 검토해야 한다.
- 부모 클래스에 정의되지 않은 메서드를 호출했을 수 있기 때문이다.
4. 비고
Map map = new HashMap();
Iterator it = map.entrySet().iterator();
- Map인터페이스는 iterator()를 직접 호출할 수 없는 대신에 keySet()이나 entrySet()과 같은 메서드를 통해서 키와 값을 각각 따로 Set의 형태로 얻어온 후 iterator()를 호출해야 한다.
- List클래스와 달리 Set클래스는 각 요소간의 순서가 유지 되지 않기 때문에 Iterator를 이용해서 읽어 와도 처음에 저장된 순서와 같지 않다.