Book/이펙티브 자바

ITEM 58 for 대신 for-each

이정인 2025. 5. 14. 22:43
package me.rockintuna.effectivejava.item;

import java.util.Iterator;
import java.util.List;

/*
전통적인 for 문보다는 for-each 문을 사용하라
 */
public class Item58 {

    public static void main(String[] args) {
        List<Integer> list = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        //전통적인 배열 순회 for문
        for (int i = 0; i < args.length; i++) {
            String arg = args[i];
        }
        //전통적인 collection 순회 for문
        for (Iterator<Integer> iterator = list.iterator(); iterator.hasNext();) {
            Integer next = iterator.next();
            System.out.println(next);
        }

        /*
        전통적인 for 문의 단점
         - 반복자와 인덱스 변수는 코드를 지저분하게 한다. (어차피 필요한건 담고있는 원소들임)
         - 요소가 많아서 코드 실수로 오류가 발생하기 쉽다.
         - 컬렉션이냐 배열이냐에 따라 형태가 많이 달라진다.

        for-each 문 (향상된 for 문)의 장점
        - 위 문제가 모두 해결됨
        - 중첩 for 문 시 실수가 줄어듦
        - 더 간단 명료하며 성능은 그대로
         */
        for (Integer i : list) {
            System.out.println(i);
        }
        for (String arg : args) {
            System.out.println(arg);
        }

        /*
        for-each 문을 사용할 수 없는 상황
        - 파괴적인 필터링 : 순회하며 remove 할 때 => removeIf 사용
        - 변형 : 순회하며 원소의 값 일부 혹은 전체를 교체해야 할 때 (인덱스 필요)
        - 병렬 반복 : 여러 컬렉션을 병렬로 순회할 때 (인덱스 필요)

        이 상황이 아니면 for-each문을 사용하자.
         */
    }

}