[Java] 향상된 for 문

2024. 12. 16. 12:16·Engineering Notes/Java & Spring

 향상된 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

'Engineering Notes > Java & Spring' 카테고리의 다른 글

[Java] if 문, switch 문, 삼항 연산자  (2) 2025.01.03
[Java] 객체의 실제 메모리 주소 얻기  (1) 2024.12.30
[Java] ==, equals() /문자열 비교 정복하기  (3) 2024.12.27
[Java] 주요 연산자 알아보기  (1) 2024.12.23
[Java] 기본 변수 한 장 정리  (3) 2024.12.20
'Engineering Notes/Java & Spring' 카테고리의 다른 글
  • [Java] 객체의 실제 메모리 주소 얻기
  • [Java] ==, equals() /문자열 비교 정복하기
  • [Java] 주요 연산자 알아보기
  • [Java] 기본 변수 한 장 정리
UTACT
UTACT
시작은 가볍게 이유는 무겁게
  • UTACT
    Software Engineer
    UTACT
    • GitHub
  • 전체
    오늘
    어제
  • 공지사항

    • README
  • 최근 글

    • 분류 전체보기 (126)
      • Project Logs (2)
        • DashHub (2)
        • Re:Act (0)
        • Samsung NW (0)
      • Engineering Notes (76)
        • Java & Spring (44)
        • Database & Persistence (1)
        • DevOps & Infra (4)
        • CS & Algorithms (26)
        • Security (1)
      • Reflections (5)
        • Retrospectives (1)
        • Feedback Received (3)
        • Challenges (1)
      • Tips (24)
      • Archive (19)
  • 태그

    JPA
    iamdefinitelyabackenddeveloper
    heap
    데이터 영속성
    BFS
    vite
    토스페이먼츠
    듀얼 피봇 퀵 정렬
    Python
    인접 노드 리스트
    팀 정렬
    @CreatedDate
    where-was-i
    BOJ
    Reallocation
    Array
    .prettierrc
    cherry-pick
    IntelliJ
    OOP
    타입 소거
    heapify
    DS
    REST
    Data Type
    버프 슈트
    hate-cnu
    CS
    도커
    VS Code
  • hELLO· Designed By정상우.v4.10.6
UTACT
[Java] 향상된 for 문
상단으로

티스토리툴바