본문 바로가기

Programming/JAVA

[펌]향상된 for 순환문

자바뿐만 아니라 다른 언어에서도 for 순환문(반복문)-이하 for 순환문으로 통일-이 존재한다...
어떤 언어든 해본 적이 있거나, 책이라도 들여다 본 경험이 있는 사람이라면 for 순환문을 모르지는 않을 것이다.
오늘 이렇게 오랜만에 포스팅을 하는 목적은 자바5.0(타이거)부터 자바에 추가된 "향상된 for 순환문(enhanced for loop)"에 대해서 알아보고자 함이다.

먼저 기본적인 for 순환문을 알아보자.
기본적인 문법은 다음과 같다.

기본적인 for 순환문


이런형식은 하다못해 웹페이지 작성시 쉽게 접할 수 있는 자바스크립트에서도 어렵지 않게 볼수 있다.

이 코드의 의미: "100번 반복"
컴파일러에서 처리하는 절차:
    * i라는 변수를 만들고 0으로 설정한다.
    * i가 100 이상이 될 때까지 반복한다.
    * 매번 반복이 끝나면 i에 1을 추가한다.
첫 번째 부분: 초기화
    순환문 본체에서 사용할 변수를 선언하고 초기화 하는 부분이다. 보통 이런 변수는 카운터로 쓰인다.
두 번째 부분: 부울 테스트
    조건 테스트가 들어가는 자리이다. 그 안에는 반드시 부울값(true 또는 false)이 나오는 코드가 들어가야 한다.
세 번째 부분: 반복 표현식
    이 부분에는 순환문을 한 번 반복할 때마다 실행할 내용이 들어가는 자리이다.
    이 표현식은 매번 반복이 끝날 때마다 한 번씩 실행된다.

예제코드

class testCode{
   public static void main(String []args){
       for(int i = 0; i < 100; i++){
           System.out.println(i);
       }
   }
}


예제결과

1
2
3
.....
97
98
99


향상된 for 순환문

위에서도 잠깐 언급했듯이 자바5.0(타이거)부터 자바에 "향상된 for 순환문"이라는 새로운 유형의 for 순환문이 추가되었다. 이 새로운 for를 쓰면 배열 및 기타 컬렉션에 들어있는 모든 원소들에 대한 반복작업을 매우 쉽게 처리할 수 있다. 포스팅을 거창하게 시작했지만 그 외에는 딱히 새로운 것은 없다. 컬렉션에 들어있는 모든 원소에 대해 더 쉽게 반복작업을 할 수 있어졌을 뿐이다.
우선 형식을 살펴보자.

향상된 for 순환문


위 코드 해석 방법: "nameArray에 들어있는 각 원소에 대해서, 원소를 'name' 변수에 저장한 다음 순환문 본체를 실행시킨다."

컴파일러에서 작업을 처리하는 과정:
    * name이라는 String 변수를 만들고 그 값을 null로 설정한다.
    * nameArray의 첫 번째 값을 name에 대입한다.
    * 순환문 본체(중괄호 사이에 들어있는 코드 블록)를 실행한다.
    * nameArray의 다음 값을 name에 대입한다.
    * 배열에 원소가 남아있는 동안 이 작업을 계속 반복한다.

첫 번째 부분: 반복 작업용 변수 선언
이 부분에서는 순환문 본체 안에서 사용할 변수를 선언하고 초기화한다. 순환문을 돌 때마다 이 변수에는 컬렉션에 들어있는 서로 다른 원소가 들어가게 된다. 이 변수의 유형은 배열에 들어있는 원소와 호환되어야만 한다.
두 번째 부분: 실제 컬렉션
두 번째 부분에는 배열 또는 기타 컬렉션에 대한 레퍼런스가 있어야 한다.

예제코드

public class NewForArray {
       
public static void main(String[] args) {
               
int j = 0;
               
int[] squares = {0, 1, 4, 9, 16, 25};
               
for (int i : squares) {
                       
System.out.printf("%d squared is %d.\n", j++, i);
               
}
       
}
}


예제결과

0 squared is 0.
1 squared is 1.
2 squared is 4.
3 squared is 9.
4 squared is 16.
5 squared is 25.


## 참고: Head First Java ( p.148, p.150 )
## more info: http://sdnkorea.com/blog/189

'Programming > JAVA' 카테고리의 다른 글

[펌]Java날짜 연산Tip  (0) 2008.11.11
[펌]날짜로 부터 경과된 날짜 구하기...  (0) 2008.11.06
StringTokenizer  (0) 2008.11.06
[펌]ANT  (0) 2008.10.16
[펌]Log4J  (0) 2008.10.16