# iterable, iterator 차이점
iterable(반복가능한~) 은 foreach 문을 사용해서 순회할수 있다는것이다.
iterator(반복자) 는 다음 원소를 준다(hasNext() , next()) 를 의미한다.
# Iterable 인터페이스
public interface Iterable<T>{
Iterator<T> iterator();
}
# Iterator 인터페이스
public interface Iterator<E>{
boolean hasNext();
E next();
}
Q) 내가 궁금한점은 언제 Iterable 을 사용하고 언제 Iterator를 사용하는지가 궁금하다.
-> 컬렉션에서는 구현 되어있기때문에 Iterator를 사용할수있다.
문제점: 내가 만든 객체에서는 어덯게 해야할까?
직접 만들어보겠다
# MyArrayIterator
package iter;
import java.util.Iterator;
public class MyArrayIterator implements Iterator<Integer> {
private int currentIndex = -1;
private int[] targetArr;
public MyArrayIterator(int[] targetArr) {
this.targetArr = targetArr;
}
// 0 1 2 3 4
@Override
public boolean hasNext() {
return currentIndex < targetArr.length-1;
}
@Override
public Integer next() {
return targetArr[++currentIndex];
}
}
hasNext() 메서드는 배열 다음 요소에 원소가 있는지 확인하는 방법이다.
next() 는 다음 원소를 반환하는 메서드 이다.
-> 아 그럼 hasNext() 루프안에 넣은후 next() 를 사용해서 쭉 돌리면 될거같다.
#순회되는 대상(iterable)
package iter;
import java.util.Iterator;
// 순회되는 대상
public class MyArray implements Iterable<Integer> {
private int[] numbers;
public MyArray(int[] numbers) {
this.numbers = numbers;
}
@Override
public Iterator<Integer> iterator() {
return new MyArrayIterator(numbers);
}
}
오버라이딩한 iterator() 메서드의 리턴을 보면 Iterator 타입을 리턴하고 있다. 즉 순회 대상을 반복자 안에 넣어준다.
# 사용 코드
package iter;
import java.util.Iterator;
public class MyArrayMain {
public static void main(String[] args) {
MyArray arr = new MyArray(new int[]{1, 2, 3, 4, 5});
Iterator<Integer> iterator = arr.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
}'Java > Java OOP' 카테고리의 다른 글
| 정렬 - Compare (0) | 2025.11.20 |
|---|---|
| 열거형 - ENUM (0) | 2025.11.17 |