본문 바로가기
Java/컬렉션 프레임워크(Collection Framework)

3. 반복자(Iterator)

by mozzi329 2022. 7. 14.
728x90
 

 

헬창(?)의 반복(Iterate)되는 일상

📌 Iterator

Iterator는 직역하면 반복자라는 의미를 가지며, 일반적으로 컬렉션에 저장된 요소들을 순차적으로 읽어오는 역할을 한다.

이러한 Iterator의 컬렉션 순회 기능은 Iterator 인터페이스에 정의되어져 있으며, Collection 인터페이스에는 Iterator 인터페이스를 구현햔 클래스의 인스턴스를 반환하는 메서드인 iterator()가 정의되어져 있다.

 

즉, Collection 인터페이스에 정의된 iterator()를 호출하면, Iterator 타입의 인스턴스가 반환된다. 그러므로 Collection 인터페이스를 상속받는 List와 Set 인터페이스를 구현한 클래스들은 iterator() 메서드를 사용할 수 있다.

 

✔️ Iterator의 메소드

메서드 설명
hasNext() 읽어올 객체가 남아 있으면 true를 리턴하고, 없으면 false를 리턴한다.
next() 컬렉션에서 하나의 객체를 읽어온다. 
이 때, next()를 호출하기 전에 hasNext()를 통해 읽어올 다음 요소가 있는지 먼저 확인해야 한다.
remove() next()를 통해 읽어온 객체를 삭제한다. 
next()를 호출한 다음에 remove()를 호출해야 한다.

hasNext() 메서드는 읽어올 다음 객체가 있으면, true를 리턴하고, 더 이상 가져올 객체가 없으면 false 를 리턴한다. 따라서 true가 리턴될 때에만 next() 메서드가 동작하도록 코드를 작성해야 한다.

 

다음은 List 에서 String 객체들을 반복해서 하나씩 가져오는 코드 예제이다.

List<String> list = ...;
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()) { // 읽어올 다음 객체가 있다면
String str = iterator.next(); // next()를 통해 다음 객체를 읽어옵니다.
...
}

 

❗️Iterator를 사용하지 않더라도, for-each문을 이용해서 전체 객체를 대상으로 반복할 수 있다.

List<String> list = ...;
for(String str : list) {
...
}

next()메서드로 가져온 객체를 컬렉션에서 제거하고 싶다면 remove()메서드를 호출하면 된다. next() 메서드는 컬렉션의 객체를 그저 읽어오는 메서드로, 실제 컬렉션에서 객체를 빼내는 것은 아니다. 하지만, remove()메서드는 컬렉션에서 실제로 객체를 삭제한다.

댓글