_

Always be tactful

프로그래밍/배웠어, 자바

[Java] 향상된 for 문

funczun 2024. 12. 16. 12:16

 향상된 for 문은 주로 배열 또는 컬렉션 객체의 요소들을 쉽게 순회하기 위해 사용된다. Java 5에서 도입된 구문으로, 앞으로 쓰일 일이 많으니 잘 기억해 두자.


향상된 for 문 기본 문법
for (타입 변수 : 배열) {
    // 반복할 코드
}

 굳이 표현식을 적자면 이렇다만, 그냥 예시를 보는 편이 훨씬 낫다.


전통적인 for 문과의 차이점
String[] names = {"Alex", "Brian", "Chris"};

// 전통적인 for 문
for (int i = 0; i < names.length; i++) {
System.out.println(names[i]);
}

 위 코드는 우리가 흔히 알고 있는 전통적인 방식의 for 문이다. 변수 i를 통해 반복 횟수를 지정하고, 인덱싱을 통해 이름들을 출력하고 있다.

String[] names = {"Alex", "Brian", "Chris"};

// 향상된 for 문
for (String name : names) {
System.out.println(name);
}

 향상된 for 문을 사용하면 불필요한 코드를 줄여 훨씬 간결하게 작성할 수 있다. 배열의 각 요소 (Alex, Brian, Chris)가 변수 name에 순차적으로 할당되어 출력하기 때문에 인덱스는 물론이고 반복 횟수를 지정할 필요도 없다.


그래서 결론은?

 

 두 반복문 모두 동일한 결과를 출력하지만, 향상된 for 문이 더 간결할 뿐 아니라 가독성 역시 우수하다. 하지만 향상된 for 문을 사용하기 위해서는 두 가지 조건이 필요하다.

 

 1. 인덱스가 필요하지 않을 것

 2. 요소를 수정할 일이 없을 것


예시를 통한 이해 점검
public class Main {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3};
        
        // 배열 요소 수정 시도
        for (int number : numbers) {
            number = number * 2;
        }
        
        // 배열 출력
        for (int number : numbers) {
            System.out.println(number);
        }
    }
}

 첫 번째 반복문에서 2를 곱해 요소의 값을 변경하였으니, 두 번째 반복문에서 출력하였을 때 2, 4, 6이 순차적으로 출력될 것처럼 보인다.

// 출력 결과
1
2
3

 그러나 실제 코드를 실행시켜 보면 배열의 원본 요소인 1, 2, 3이 그대로 출력된 것을 볼 수 있다.


왜 그럴까?

 

 향상된 for 문에서의 변수 number는 각 요소를 복사한 값이다. 즉, 원본 배열에 영향을 미치지 않는다는 이야기다. 물론 배열의 원본을 수정하지 않고, 일회성으로 단순히 출력되는 값만 맞으면 상관없다고 한다면 아래와 같이 코드를 짤 수도 있기는 하다.

public class Main {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3};
        
        // 원본 수정 없이 출력
        for (int number : numbers) {
            number = number * 2;
            System.out.println(number);
        }
    }
}
// 출력 결과
2
4
6
728x90