배열이나 Collection을 사용할 때 각 배열의 요소들이나 Collection의 요소들을 차례대로 방문해야 할 경우가 자주 있습니다. 주로 for문을 사용하게 되는데 가장 일반적인 for문의 형태가 다음과 같습니다.

for(int i = 0 ; i < ~.length or size() ; i++)

이것을 확 줄여 놓은 것이 for each 구문이며 보통 아래와 같이 생겼습니다.

for(Type t : arrayName or collectionName)

예제 소스코드를 보면서 직관적으로 익히는 것이 좋을 것 같습니다.
먼저 배열을 사용하는 경우입니다.

@Test
   public void arrayView(){
       int[] numbers = {1, 2, 3, 4, 5};

       StringBuilder sb = new StringBuilder();
       for (int i = 0; i < numbers.length; i++)
           sb.append(numbers[i]);

       StringBuilder sb2 = new StringBuilder();
       for (int i : numbers)
           sb2.append(i);

       assertEquals(sb.toString(), sb2.toString());
   }

for 문을 사용할 때 보통 증감 연산에서 1씩 증가 시키면서 차례대로 배열의 모든 요소에 접근하는 경우에 아래와 같이 표현할 수 있습니다.

“numbers에 있는 모든 int 타입의 요소들에 대해서 차례대로” 라고 할 수 있습니다.

이번에는 콜렉션을 사용하는 경우입니다.

@Test
   public void collectionView(){
       List<Integer> numbers = new ArrayList<Integer>();
       for (int i = 0; i < 5; i++)
           numbers.add(i++);

       StringBuilder sb = new StringBuilder();
       for (int i = 0; i < numbers.size(); i++)
           sb.append(numbers.get(i));

       StringBuilder sb2 = new StringBuilder();
       for (int i : numbers)
           sb2.append(i);

       assertEquals(sb.toString(), sb2.toString());
   }

배열을 사용할 때와 마찬가지로 해석할 수 있습니다. 지금 이 예제에서는 편의를 위해AutoBoxing, AutoUnBoxing 그리고 Generic도 사용되었습니다.