자바에는 컬렉션의 요소를 반복할 때 외부 반복자(External Iterator)와 내부 반복자(Internal Iterator)라는 두 가지 방식이 있다. 이 글에서는 두 개념의 차이점을 비교하고, 각각의 장단점을 설명해보려고 한다.
외부 반복자(External Iterator)
외부 반복자는 개발자가 직접 반복문을 사용하여 컬렉션의 요소를 하나씩 순회하는 방식이다. 반복을 제어하는 주체가 외부(개발자 코드)에 있기 때문에 외부 반복자라고 한다. 외부 반복자는 Iterator 객체를 사용하거나, 향상된 for문을 이용하여 반복을 수행한다.
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class Example {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("신짱구");
set.add("신짱아");
set.add("흰둥이");
//1. 향상된 for문
for (String item : set) {
System.out.println(item);
}
System.out.println();
//2. Iterator 사용
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
System.out.println(item);
}
}
}
내부 반복자(Internal Iterator)
내부 반복자는 컬렉션이 자체적으로 요소를 순회하며, 개발자는 어떤 작업을 수행할지만 정의하는 방식이다. 반복을 어떻게 수행할지는 컬렉션 내부에서 결정하기 때문에 내부 반복자라고 한다. 내부 반복자는 주로 Stream API의 forEach() 메서드를 이용하여 처리한다.
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Stream;
public class Example {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("신짱구");
set.add("신짱아");
set.add("흰둥이");
//내부 반복자 사용(Stream)
Stream<String> stream = set.stream();
stream.forEach(name -> System.out.println(name));
}
}
외부 반복자, 내부 반복자 비교
외부 반복자(External Iterator) | 내부 반복자(Internal Iterator) | |
제어 방식 | 개발자가 직접 반복을 제어 | 컬렉션 내부에서 자동으로 반복 수행 |
사용 방식 | Iterator, 향상된 for문 사용 | Stream 사용 |
코드 간결성 | 반복문을 직접 작성해야 함 | 더 간결한 코드 |
병렬 처리 | 불가능 | parallelStream()을 사용하면 가능 |
유연성 | 단순 반복에 적합 | 필터링, 매핑 등 다양한 작업을 쉽게 적용 가능 |
결론
외부 반복자는 반복 제어를 세밀하게 조정할 수 있지만, 코드가 길어지고 유지보수가 어려울 수 있다. 반면, 내부 반복자는 가독성이 뛰어나고 병렬 처리가 가능하여 주로 내부 반복자를 선호한다! 그러나 단순한 반복 작업에서는 외부 반복자가 더 효율적일 수 있으므로 상황에 따라 적절한 방법을 선택하는 것이 중요하다.
'Language > JAVA' 카테고리의 다른 글
[JAVA]Optional 클래스 (0) | 2025.02.10 |
---|---|
[JAVA]IntStream (0) | 2025.02.09 |
[JAVA]String 클래스 메소드 (0) | 2025.01.20 |
[JAVA]입출력 메서드 (0) | 2025.01.14 |
[JAVA]정규 표현식 (0) | 2025.01.14 |