정처기 감자정처기 감자
Java배열/문자열

검색

검색어를 입력해 개념, 문제, 필기를 찾습니다.

Java for-each문 (향상된 for문)

코딩Java
읽는데 10분 소요
처음 쓰인 날: 2026-04-02
마지막 수정일: 2026-10-01
조회수: —
선수학습(2개)
  • 반복문 (for, while) - 루프의 기초
  • 배열과 리스트의 기초

요약

Java for-each문(향상된 for문)의 기본 문법과 동작 원리를 알아봅니다. 일반 for문과의 차이, 2차원 배열에서의 활용 등 정보처리기사 실기에 출제되는 for-each 개념을 정리합니다.

for-each문 핵심 정리

개념설명예시
for-each문배열의 원소를 처음부터 끝까지 하나씩 꺼내는 반복문 1for (int x : arr)
기본 문법for (타입 변수 : 배열) — 콜론(:)은 "~에서 꺼낸다"는 뜻for (String s : names)
일반 for문과 차이값만 꺼낼 때 사용. 몇 번째 원소인지(인덱스)가 필요하면 일반 for문 사용for (int i = 0; i < arr.length; i++)

for-each문이란?

for-each문은 배열의 원소를 처음부터 끝까지 하나씩 꺼내는 반복문입니다. "향상된 for문(enhanced for)" 이라고도 부릅니다. 여기서 "향상된"은 "더 좋다"는 뜻이 아니라, 배열 순회를 더 간편하게 쓸 수 있도록 추가된 문법이라는 의미입니다.

java
코드 하이라이팅 중…
출력
코드 하이라이팅 중…
for-each문 기본 동작 — arr 배열의 원소 10, 20, 30이 회차마다 x에 복사되어 출력되는 과정

for (int x : arr) 은 "arr 배열에서 원소를 하나씩 꺼내 x에 담아라" 라는 뜻입니다. 콜론(:)이 "~에서 꺼낸다"는 역할을 합니다.


기본 문법

java
코드 하이라이팅 중…
  • 타입 2: 배열 원소의 타입과 같아야 합니다. int[] 배열이면 int, String[] 배열이면 String
  • 변수명: 꺼낸 원소를 담을 변수 이름. 자유롭게 지을 수 있습니다
  • 배열: 순회할 대상 배열

실행 순서

java
코드 하이라이팅 중…
  1. 배열의 첫 번째 원소 names[0]을 name에 복사하고, 중괄호 안의 코드를 실행 → "감자" 출력
  2. 배열의 두 번째 원소 names[1]을 name에 복사하고, 중괄호 안의 코드를 실행 → "고구마" 출력
  3. 배열의 세 번째 원소 names[2]를 name에 복사하고, 중괄호 안의 코드를 실행 → "옥수수" 출력
  4. 배열의 끝에 도달하면 반복 종료
for-each문 실행 흐름 — names 배열 칸에는 String 객체의 참조값이 들어 있고, 매 반복마다 그 참조값이 name에 복사되어 같은 String 객체를 가리키는 과정

String은 참조형이라 배열 칸에 문자열 자체가 아니라 String 객체를 가리키는 참조값이 들어 있습니다. for-each문은 매 반복마다 이 참조값을 name에 복사하므로, name과 names[0]은 같은 "감자" 객체를 가리킵니다. 문자열이 하나 더 만들어지는 것이 아닙니다.

원소 타입반복 변수에 복사되는 것예시
기본형 (int, double 등)값 자체 (값 복사)for (int x : arr) → x에 1이 복사됨
참조형 (String, 배열, 객체)객체를 가리키는 참조값 (참조값 복사)for (String name : names) → name에 "감자" 객체의 참조값이 복사됨

일반 for문과 비교

같은 동작을 일반 for문으로 작성하면 이렇습니다.

java
코드 하이라이팅 중…
출력
코드 하이라이팅 중…
일반 for문과 for-each문 비교 — 일반 for문은 i로 arr[i] 칸을 읽고, for-each문은 인덱스 없이 원소 값을 x에 복사
구분일반 for문for-each문
인덱스 사용i로 인덱스 접근 가능인덱스 없음
값 접근arr[i]로 접근변수에 바로 담김
역순 순회가능 (i--)불가능 (항상 처음부터 끝까지)
원소 교체arr[i] = 값으로 가능불가 (반복 변수에 대입해도 배열 칸은 그대로)

역순 순회는 일반 for문으로만 가능합니다.

java
코드 하이라이팅 중…
출력
코드 하이라이팅 중…
일반 for문 역순 순회 — i가 2, 1, 0으로 줄어들며 arr[2], arr[1], arr[0]을 차례로 출력하는 과정

배열 칸에 새 값을 대입해 원소 자체를 바꾸는 것도 일반 for문으로 해야 합니다.

java
코드 하이라이팅 중…
일반 for문으로 원소 교체 — i가 0, 1, 2일 때 arr[i]에 10을 곱한 값을 대입해 배열이 {10, 20, 30}으로 바뀌는 과정
for-each문의 반복 변수에 대입해도 배열 원소는 바뀌지 않습니다
반복 변수는 배열 원소를 복사한 별도의 변수입니다. 그 변수에 새 값을 대입하면 변수만 바뀌고 배열 칸은 그대로입니다. 단, 원소가 참조형이면 복사된 참조값으로 객체나 행 배열의 내용을 고칠 수 있고, 이 변경은 원본에도 보입니다(아래 '반복 변수로 객체 내용 수정하기' 참고).
java
코드 하이라이팅 중…
for-each문의 값 복사 — arr[0]의 값 1이 x에 복사되고, x를 10으로 바꿔도 arr는 {1, 2, 3} 그대로

2차원 배열과 for-each문

Java의 2차원 배열은 "배열의 배열"입니다. int[][] matrix는 int[] 타입의 원소들을 담은 배열이며, 각 원소가 또 하나의 1차원 배열(행)입니다. 따라서 for-each문으로 꺼내지는 원소는 1차원 배열(행)입니다.

java
코드 하이라이팅 중…
출력
코드 하이라이팅 중…
for-each문과 2차원 배열 — matrix의 각 칸에 든 행 배열 주소가 row에 복사되고, 안쪽 for-each가 행의 값을 value에 하나씩 꺼내는 과정

바깥 for-each에서 int[] row로 받는 이유는, matrix의 각 원소가 int[](1차원 배열)이기 때문입니다. 안쪽 for-each에서 row의 원소를 다시 하나씩 꺼내면 개별 int 값을 얻을 수 있습니다.


반복 변수로 객체 내용 수정하기

원소가 참조형이면 반복 변수에는 참조값이 복사됩니다. 그래서 두 동작의 결과가 다릅니다.

  • 반복 변수에 새 값을 대입 → 반복 변수만 다른 객체를 가리키게 되고, 배열 칸은 그대로
  • 반복 변수로 객체의 내용을 수정 → 배열 칸과 반복 변수가 같은 객체를 가리키므로, 원본에서도 바뀐 내용이 보임
java
코드 하이라이팅 중…
출력
코드 하이라이팅 중…
반복 변수로 행 배열 내용 수정 — m[0]과 row가 같은 행 배열 주소200을 가리켜 row[0] = 9가 m[0][0]에도 보이는 과정

row와 m[0]이 같은 행 배열을 가리키므로 row[0] = 9는 m[0][0]을 바꿉니다.

이어서 row에 새 배열을 대입해 봅니다.

java
코드 하이라이팅 중…
출력
코드 하이라이팅 중…
반복 변수에 새 배열 대입 — row만 새 배열 주소300을 가리키고 m[0]은 여전히 주소200의 행 배열을 가리키는 상태

row = new int[]{3}은 row가 새 배열을 가리키게 할 뿐, m[0] 칸에 든 참조값은 바뀌지 않습니다. 그래서 m[0][0]은 여전히 9입니다.

java
코드 하이라이팅 중…
출력
코드 하이라이팅 중…
반복 변수로 StringBuilder 내용 수정 — b[0]과 s가 같은 StringBuilder 객체 주소500을 가리켜 append 결과 AB가 b[0]에도 보이는 과정

StringBuilder는 내용을 바꿀 수 있는 객체라 s.append("B")의 결과가 b[0]에도 보입니다. 반면 String은 내용을 바꿀 수 없는 객체라 name = name + "!"처럼 써도 새 문자열을 가리키게 될 뿐 배열 원소는 그대로입니다.

정리하면, for-each문으로 배열 칸 자체를 다른 값으로 교체할 수는 없지만, 원소가 가리키는 객체·행 배열의 내용은 반복 변수를 통해 수정할 수 있습니다. 3


정보처리기사 실기 대비 문제

문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.

Footnotes

  1. 배열 외에도 컬렉션(Collection)에 사용할 수 있습니다. 컬렉션은 여러 데이터를 모아서 관리하는 자료구조로, ArrayList, HashMap 등이 대표적입니다. 정보처리기사 실기에서는 주로 배열과 함께 출제됩니다. ↩

  2. 타입(자료형)은 변수에 담을 데이터의 종류를 뜻합니다. int는 정수, double은 소수, String은 문자열, boolean은 참/거짓을 저장합니다. ↩

  3. Java 언어 명세(JLS 14.14.2)는 배열에 대한 for-each문을 "배열 원소 a[i]를 반복 변수에 대입한 뒤 본문을 실행하는 일반 for문"과 같은 의미로 정의합니다. 따라서 반복 변수에는 원소의 값(참조형이면 참조값)이 복사됩니다. ↩


메가커피와 함께, 홈페이지 개선에 참여하세요! ☕
혹시 이용에 불편한 점이나 개선이 필요한 부분을 발견하셨나요? 댓글로 알려주시면 더 나은 감자가 될 수 있어요! 🥔 제보해주신 모든 분께 메가커피 기프티콘을 드립니다! (본인 이메일로 댓글 달아주셔야해요~)
정처기 감자정처기 감자

정보처리기사 합격
도와줄라고 하는 감자

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매
© 2025 재현기획개발. All rights reserved.
  • 정처기 감자의 시작
  • 업데이트 로그
  • 개인정보 처리방침
  • 이용약관
상호명 : 재현기획개발 / 주소: 서울특별시 영등포구 영등포로 150, 지하1층 108호 L145 가라지(당산동1가, 생각공장 당산) / 대표: 김재현 / 전화: 010-8158-7127 / 통신판매업신고: 제2025-서울영등포-1569호 / 이메일: contact@edugamja.com / 사업자등록번호: 573-51-00999