for-each 문을 사용하기 위해서는 Iterable 인터페이스를 구현해야 한다.
자바 컬렉션 프레임워크의 클래스들은 Iterable 인터페이스를 구현하여 iterator() 메서드를 제공하며 이를 통해 요소들을 순회할 수 있다.
for-each
for-each 문은 배열이나 컬렉션과 같은 반복 가능한 객체를 순회(iterate) 하기 위한 간단한 문법을 제공한다.
Iterable Interface
for-each 문을 사용하려면 대상 객체가 Iterable 인터페이스를 구현해야 한다.
Iterable 인터페이스는 java.lang 패키지에 위치하며 제네릭 인터페이스로 Iterator<T> iterator() 메서드를 선언하고 있다.
Iterable Interface 구조
- iterator() 메서드: 컬렉션에 대한 Iterator를 반환하여 요소를 순회할 수 있게 한다.
- 제네릭 타입 T: 컬렉션이 보유한 요소의 타입을 명시한다.
Iterable을 구현하면 해당 객체는 반복 가능한 객체가 되어 for-each 문에서 사용할 수 있다.
Custom Iterable Class
사용자 정의 클래스나 컬렉션에서 for-each 문을 사용하려면 Iterable 인터페이스를 구현해야 되는데 실제로 한번 해보자.
구현 단계는 다음과 같다.
- 클래스 선언에 Iterable 인터페이스 구현 선언
- iterator() 메서드 구현
- Iterator 인터페이스 구현
- IntegerCollection 클래스는 Iterable<Integer>를 구현하여 for-each 문에서 사용할 수 있다.
- iterator() 메서드는 내부 클래스인 IntegerIterator의 인스턴스를 반환한다.
- IntegerIterator 클래스는 Iterator<Integer>를 구현하여 컬렉션의 요소를 순회한다.
- for-each 문은 IntegerCollection의 iterator()를 사용하여 요소를 순회하고 값을 출력한다.
Iterable, Iterator 차이점
Iterable은 컬렉션이 Iterator를 제공할 수 있도록 하는 인터페이스이며, for-each 문에서 컬렉션을 사용할 수 있게 한다. |
Iterator는 컬렉션의 요소를 하나씩 순회하기 위한 인터페이스이며, 실제로 요소에 접근하고 순회하는 데 사용된다. |
두 인터페이스는 밀접한 관계가 있으며, Iterable은 Iterator를 생성하고, Iterator는 요소를 순회한다. |
개발자는 컬렉션 클래스를 작성할 때 Iterable을 구현하여 iterator() 메서드를 제공하고, 필요한 경우 Iterator를 구현하여 순회 로직을 정의한다. |
'Dev > Java' 카테고리의 다른 글
『Java』 HashMap은 어떤 원리로 동작하는가 (0) | 2024.11.22 |
---|---|
『Java』 상속보다 컴포지션을 사용해야 하는 이유 (0) | 2024.11.20 |
『Java』 생성자와 static 블록은 무엇이 다를까? (0) | 2024.11.19 |
『Java』 Exception 처리, 맛보기 (0) | 2024.11.08 |
『Java』 동일성 (Identity) vs 동등성 (Equality) (0) | 2024.11.04 |