자바 - 이터레이터 사용 방법
안녕하세요, 초보 프로그래머 여러분! 오늘은 자바 이터레이터의 fascinaning한 세상으로 함께潜入합니다. 프로그래밍에 새로운 사람이라면 걱정하지 마세요; 이 개념을 단계별로 안내해 드릴게요. 수년간 수많은 학생들을 가르쳐온 경험을 바탕으로 말이죠. 이 흥미로운 여정을 함께 시작해봅시다!
이터레이터는 무엇인가요?
거대한 컬러풀한 레고 브릭 상자를 가정해 보세요. 이터레이터는 그 상자 안의 브릭을 하나씩 거르는 마법의 도우미입니다. 컬렉션의 하이어러키 구조를 알지 않고도 순차적으로 요소에 접근할 수 있는 방법입니다.
이터레이터를 사용하는 이유는 무엇인가요?
이터레이터는 다양한 유형의 컬렉션(리스트, 셋, 맵 등)을 동일한 인터페이스를 사용하여 탐색할 수 있는 표준 방법을 제공하기 때문에 매우 유용합니다. 이는 여러 종류의 컬렉션과 작동할 수 있는 코드를 작성할 때 탐색 로직을 변경하지 않아도 되기 때문입니다.
이터레이터 인터페이스
자바에서 이터레이터 인터페이스는 자바 컬렉션 프레임워크의 일부입니다. 다음과 같은 메서드를 선언합니다:
메서드 | 설명 |
---|---|
hasNext() | 컬렉션에 더 많은 요소가 있으면 true를 반환합니다 |
next() | 컬렉션의 다음 요소를 반환합니다 |
remove() | next()가 반환한 마지막 요소를 제거합니다 (선택 사항) |
이터레이터의 기본 사용법
이터레이터가 어떻게 작동하는지 간단한 예제를 통해 살펴보겠습니다:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class IteratorExample {
public static void main(String[] args) {
List<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Cherry");
Iterator<String> iterator = fruits.iterator();
while (iterator.hasNext()) {
String fruit = iterator.next();
System.out.println(fruit);
}
}
}
이 예제에서 우리는 과일 목록을 만들고 그것을 이터레이터를 사용하여 하나씩 출력합니다. 이를 단계별로 설명하겠습니다:
- 우리는 문자열 ArrayList를 만들고 몇 가지 과일을 추가합니다.
- 리스트에서 이터레이터를 가져옵니다.
-
hasNext()
를 사용하여 더 많은 요소가 있는지 확인합니다. - 루프 내부에서
next()
를 사용하여 다음 과일을 가져와 출력합니다.
이 코드를 실행하면 각 과일이 별도의 줄에 출력됩니다. 이터레이터가 상자에서 하나씩 과일을 꺼내 보여주는 것과 같습니다!
리스트이터레이터 인터페이스
리스트에 대해, 자바는 이터레이터를 향상된 이터레이터인 ListIterator를 제공합니다. 이는 이터레이터 인터페이스를 확장하고 더 많은 기능을 추가합니다:
메서드 | 설명 |
---|---|
add(E e) | 지정된 요소를 리스트에 삽입합니다 |
hasPrevious() | 이전 요소가 있으면 true를 반환합니다 |
previous() | 리스트의 이전 요소를 반환합니다 |
nextIndex() | next()가 반환할 요소의 인덱스를 반환합니다 |
previousIndex() | previous()가 반환할 요소의 인덱스를 반환합니다 |
set(E e) | next()나 previous()가 반환한 마지막 요소를 대체합니다 |
리스트이터레이터 사용법
리스트를 양방향으로 탐색하는 방법을 보겠습니다:
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class ListIteratorExample {
public static void main(String[] args) {
List<String> colors = new ArrayList<>();
colors.add("Red");
colors.add("Green");
colors.add("Blue");
ListIterator<String> listIterator = colors.listIterator();
System.out.println("정방향:");
while (listIterator.hasNext()) {
System.out.println(listIterator.next());
}
System.out.println("\n 역방향:");
while (listIterator.hasPrevious()) {
System.out.println(listIterator.previous());
}
}
}
이 예제에서 우리는 리스트이터레이터를 사용하여 색상 목록을 정방향과 역방향으로 탐색합니다. 레고 브릭을 시작에서 끝으로, 그리고 다시 반대로 걸어가는 것과 같습니다!
탐색 중 컬렉션 수정
이터레이터의 훌륭한 점 중 하나는 탐색 중 컬렉션을 수정할 수 있다는 점입니다. 특정 기준을 만족하는 요소를 제거하는 예제를 보겠습니다:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class IteratorRemoveExample {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
for (int i = 1; i <= 10; i++) {
numbers.add(i);
}
Iterator<Integer> iterator = numbers.iterator();
while (iterator.hasNext()) {
Integer number = iterator.next();
if (number % 2 == 0) {
iterator.remove();
}
}
System.out.println("홀수: " + numbers);
}
}
이 예제에서 우리는 목록에서 모든 짝수를 제거합니다. 이터레이터의 remove()
메서드를 사용하여 탐색 중 요소를 안전하게 제거합니다. 목록에서 직접 요소를 제거하려고 하면 ConcurrentModificationException
이 발생합니다. 레고 브릭 상자에서 특정 브릭을 제거하는 것과 같은 것입니다!
결론
이터레이터는 자바에서 컬렉션을 효율적이고 안전하게 탐색하는 강력한 도구입니다. 다양한 유형의 컬렉션에 대해 동일한 인터페이스를 사용하여 요소에 접근할 수 있어 코드가 더 유연하고 재사용 가능하게 됩니다.
기억해 두세요, 프로그래밍은 레고 브릭으로 만드는 것과 같습니다. 이터레이터는 여러분이 가지고 있는 많은 멋진 도구 중 하나입니다. 계속 연습하고 탐구하면 곧 자바로 놀라운 것을 만들 수 있을 것입니다!
미래의 프로그래머 여러분, 행복하게 코딩하세요! ?????
Credits: Image by storyset