For-Each 문은 컬렉션의 각 원소마다 코드 블록을 실행하는 방법을 제공해요.
일부 문서(예: Oracle 문서)에서는 이를 향상된 for문이라고 불러요.
일반적인 문법은 다음과 같아요:
for(declaration: collection) {
body;
}
declaration에서는 컬렉션에서 가져와 대입될 값을 담을 변수를 선언해요.
collection은 루프 변수에 대입될 값들을 담고 있는 배열이나 컬렉션이에요.
body에는 컬렉션의 각 값마다 한 번씩 실행될 문이 들어가요.
예를 들면 다음과 같아요:
char[] vowels = {'a', 'e', 'i', 'o', 'u'};
for(char vowel: vowels) {
System.out.println(vowel);
}
이 코드는 다음을 출력해요:
a
e
i
o
u
일반적으로 for-each문은 다음과 같은 이유로 for문보다 선호해요:
for-each문은 모든 값을 순회하는 것이 보장돼요.for-each문은 더 _선언적_이에요. 즉, 코드가 어떻게 하는지가 아니라 무엇을 하는지를 전달해요.for-each문은 실수가 날 여지가 거의 없는 반면, for문은 off-by-one 오류가 나기 쉬워요 (<를 쓸지 <=를 쓸지 생각해 봐요).for-each문은 모든 컬렉션 타입에서 동작해요. 인덱스로 원소에 접근하는 것을 지원하지 않는 타입(예: Set)도 마찬가지예요.