[JAVA]내부 반복자 vs 외부 반복자

2025. 2. 5. 21:01·Language/JAVA

자바에는 컬렉션의 요소를 반복할 때 외부 반복자(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
'Language/JAVA' 카테고리의 다른 글
  • [JAVA]Optional 클래스
  • [JAVA]IntStream
  • [JAVA]String 클래스 메소드
  • [JAVA]입출력 메서드
yxxjxxeee
yxxjxxeee
  • yxxjxxeee
    공부 일지
    yxxjxxeee
  • 전체
    오늘
    어제
    • study
      • Framework
        • Spring
      • Language
        • JavaScript
        • C | C++
        • JAVA
        • PHP
      • CS
        • 네트워크
        • 자료구조
        • 데이터베이스
        • 운영체제
      • DBMS
        • MySQL
      • 코딩테스트
        • 백준
        • 프로그래머스
        • LeetCode
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 쇼핑몰 제작 프로젝트(PHP)
    • github
  • 공지사항

  • 인기 글

  • 최근 글

  • hELLO Designed By 정상우
    Version v4.10.2
yxxjxxeee
[JAVA]내부 반복자 vs 외부 반복자
상단으로

티스토리툴바