본문 바로가기
Dev/Java

『Java』 for-each 문을 사용하기 위한 인터페이스는 무엇인가?

by 세대교체 2024. 11. 19.

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 인터페이스를 구현해야 되는데 실제로 한번 해보자.

 

구현 단계는 다음과 같다.

  1. 클래스 선언에 Iterable 인터페이스 구현 선언
  2. iterator() 메서드 구현
  3. 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를 구현하여 순회 로직을 정의한다.