[Java] Iterator

Bam·2024년 3월 15일
0

Java

목록 보기
70/98
post-thumbnail

Iterator

Iterator(반복자)는 컬렉션의 요소들을 순회할 수 있는 기능을 제공하는 인터페이스입니다. 컬렉션의 순회라하면은 for, while의 반복문을 사용해서 뒤져보면되는데 왜 Iterator를 쓸까요?

그 이유는 반복문에 비해 직관적으로 메소드를 이용해서 요소를 순회할 수 있다는 것과 Set과 같은 인덱스가 없는 컬렉션에서의 순회를 위해서 등 여러 이유가 있습니다. 정리하자면 다음과 같은 장점으로 인해 Iterator를 사용한다고 할 수 있습니다.

  • 메소드를 통해 요소를 반복문보다 더 쉽게 제어할 수 있다.
  • 반복문으로 할 수 없는 작업을 쉽게할 수 있다.
  • 반복문보다 직관적인 코드를 작성할 수 있다.

와 같은 장점으로 인해서 컬렉션에서는 Iterator를 사용하는 것이 여러므로 편리합니다.

속도는 Iterator가 객체를 생성하고 호출하는 과정때문에 반복문보다는 조금 느리다고 합니다.

Iterator가 지원하는 메소드는 다음과 같습니다.

메소드설명
boolean hasNext()더 반복할 객체(다음 객체)가 있는지 여부를 반환
E next()컬렉션의 다음 객체를 가져온다
void remove()next()로 가져온 객체를 컬렉션에서 삭제

Iterable

Iterable 인터페이스는 구현 클래스에서 Iterator를 사용하기 위한 iterator()를 가지고 있는 인터페이스입니다. 따라서 Iterable 인터페이스를 implements하고 있다면 그 클래스는 Iterator를 사용할 수 있는 객체라고 볼 수 있습니다.

공식 문서에서 보시면 Iterable 인터페이스는 수많은 하위 인터페이스와 구현 클래스를 가지고 있음을 볼 수 있습니다.


Iterator 사용하기

사용법은 정말 간단합니다. Iterator를 사용할 수 있는 컬렉션에서 Iterator를 선언하기만 하면 바로 사용할 수 있습니다.

Iterator는 Collection 인터페이스에서 지원하고 있습니다. 따라서 Collection을 구현한 컬렉션 클래스만이 사용할 수 있습니다. (List와 Set 계열)

Iterator<E> 변수명 = 컬렉션.iterator();	//iterator 가져오기

다음은 Iterator를 실제로 ArrayList에서 사용하는 예제 코드입니다.

public class Main {
    public static void main(String[] args) {
        ArrayList<Integer> al = new ArrayList<Integer>();	//ArrayList 생성

        al.add(1);	//요소 삽입
        al.add(2);
        al.add(3);
        al.add(4);
        al.add(5);
        System.out.println(al);

        Iterator<Integer> iterator = al.iterator();	//Iterator 생성

        while (iterator.hasNext()) {	//ArrayList에서 가져올 객체가 더 없으면 반복 중지
            Integer elem = iterator.next();	//next()로 객체 취득

            System.out.println("현재 객체: " + elem);

            if (elem == 5) {
                iterator.remove();	//5 객체 삭제
            }
        }

        System.out.println(al);
    }
}

Iterator<Integer> iterator = al.iterator();

while (iterator.hasNext()) {
	Integer elem = iterator.next();
}

0개의 댓글