향상된 for문(for-each)

2026. 2. 10. 00:14·김영한/자바 입문

 

반복문을 다루다 보면 배열의 모든 요소를 처음부터 끝까지 순서대로 처리하는 경우가 매우 많다.
이런 상황에서 매번 인덱스를 선언하고, 길이를 비교하고, 인덱스를 증가시키는 코드를 작성하는 것은 다소 번거롭다.

이러한 불편함을 해결하기 위해 자바에서는 향상된 for문을 제공한다.
배열이나 컬렉션의 각 요소를 하나씩 꺼내 처리하는 방식이기 때문에 for-each문이라고도 부른다.

 

 

향상된 for문의 기본 구조

향상된 for문의 기본 형태는 다음과 같다.

for (변수 : 배열 또는 컬렉션) {
    // 배열 또는 컬렉션의 요소를 순회하면서 수행할 작업
}

`:` 기호를 기준으로 오른쪽에는 탐색할 대상(배열 또는 컬렉션)을 적고,
왼쪽에는 각 반복마다 꺼낸 값을 담을 변수를 선언한다.

 

 

예제

package array;

public class EnhancedFor1 {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5};

        // 일반 for문
        for (int i = 0; i < numbers.length; ++i) {
            int number = numbers[i];
            System.out.println(number);
        }

        // 향상된 for문, for-each문
        for (int number : numbers) {
            System.out.println(number);
        }

        // 향상된 for문을 사용할 수 없는 경우
        for (int i = 0; i < numbers.length; ++i) {
            System.out.println("number" + i + "번의 결과는: " + numbers[i]);
        }
    }
}

 

 

 

일반 for문 방식

먼저 일반적인 for문을 살펴보자.

for (int i = 0; i < numbers.length; ++i) {
    int number = numbers[i];
    System.out.println(number);
}

이 방식에서는 다음과 같은 작업을 개발자가 직접 처리해야 한다.

  • 인덱스를 저장할 변수`i` 선언
  • 배열의 끝을 판단하기 위한 조건`i < numbers.length`
  • 반복마다 인덱스 증가`i++`
  • 인덱스를 이용한 배열 접근`numbers[i]`

배열의 요소를 단순히 처음부터 끝까지 순회하고 싶은 것뿐인데,
생각보다 신경 써야 할 코드가 많다.

 

 

향상된 for문 방식

같은 동작을 향상된 for문으로 작성하면 다음과 같다.

for (int number : numbers) {
    System.out.println(number);
}

이 코드는 앞선 일반 for문과 동일한 결과를 만든다.

동작 방식은 다음과 같다.

  • numbers 배열의 첫 번째 요소를 꺼내 number에 저장
  • for문 내부 코드 실행
  • 다음 요소를 꺼내 다시 number에 저장
  • 배열의 끝까지 이 과정을 반복
  • 더 이상 꺼낼 요소가 없으면 반복 종료

배열의 인덱스, 종료 조건, 증가 연산은 모두 내부에서 자동으로 처리된다.

 

 

향상된 for문의 장점

향상된 for문은 다음과 같은 장점을 가진다.

  • 인덱스를 직접 다루지 않아도 된다
  • 종료 조건을 작성할 필요가 없다
  • 코드가 간결하고 가독성이 좋다
  • 실수로 인덱스를 잘못 사용하는 오류를 줄일 수 있다

따라서 배열이나 컬렉션을 처음부터 끝까지 순회만 할 경우에는 향상된 for문이 매우 적합하다.

 

 

향상된 for문을 사용할 수 없는 경우

향상된 for문에는 한 가지 중요한 제약이 있다.
바로 증가하는 인덱스 값이 외부로 드러나지 않는다는 점이다.

다음과 같은 코드에서는 향상된 for문을 사용할 수 없다.

for (int i = 0; i < numbers.length; ++i) {
    System.out.println("number" + i + "번의 결과는: " + numbers[i]);
}

이 경우에는 배열의 값뿐만 아니라 현재 인덱스(i) 자체를 출력해야 한다.
향상된 for문에서는 이런 인덱스 값을 직접 사용할 수 없기 때문에 일반 for문을 사용해야 한다.

 

 

억지로 사용하는 경우 (권장하지 않음)

다음과 같이 향상된 for문을 억지로 사용하는 것도 가능하다.

int i = 0;
for (int number : numbers) {
    System.out.println("number" + i + "번의 결과는: " + number);
    i++;
}

하지만 이 방식은 가독성이 떨어지고,
굳이 향상된 for문의 장점을 버리고 인덱스를 흉내 내는 형태가 된다.

이런 경우에는 처음부터 일반 for문을 사용하는 것이 더 명확하고 바람직하다.

'김영한 > 자바 입문' 카테고리의 다른 글

메서드 호출과 값 전달  (0) 2026.02.10
배열의 선언과 생성  (0) 2026.02.09
Scanner  (0) 2026.02.09
형변환과 오버플로우  (0) 2026.02.09
스코프  (0) 2026.02.09
'김영한/자바 입문' 카테고리의 다른 글
  • 메서드 호출과 값 전달
  • 배열의 선언과 생성
  • Scanner
  • 형변환과 오버플로우
sqaxe1
sqaxe1
woojoo-devlog 님의 블로그 입니다.
  • sqaxe1
    Woojoo's Devlog
    sqaxe1
  • 전체
    오늘
    어제
    • 분류 전체보기 (148)
      • Backend (9)
        • Servlet (7)
        • Spring (2)
      • Frontend (1)
      • CS (0)
      • Book (33)
        • 자바 웹 프로그래밍 Next Step (30)
        • 테스트 주도 개발: 고품질 쾌속개발을 위한 TDD.. (1)
        • 성공과 실패를 결정하는 1%의 네트워크 원리 (2)
      • Engineering (0)
        • Testing (0)
      • Infra (6)
        • AWS (6)
      • Java (4)
      • Network (1)
      • 김영한 (28)
        • 자바 입문 (8)
        • 실전 자바 - 기본편 (6)
        • 실전 자바 - 중급편 (10)
        • 실전 자바 - 고급편 (4)
      • Web (39)
        • Web Basics (39)
      • Project (24)
        • NeoSquare (0)
        • Memo Evolution (24)
      • 정보처리기사 (0)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    aws
    java
    개발서적
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
sqaxe1
향상된 for문(for-each)
상단으로

티스토리툴바