Media Log


1. while


우리들이 쓰고 있는 컴퓨터는 반복에 특화된 기계입니다. 사람이 어떤 일을 반복하는데에는 많은 시간이 걸리지만, 컴퓨터는 엄청나게 빠른 속도로 무수히 많이 반복할 수 있습니다. 앞으로 우리가 배울 while, for문을 통해서 컴퓨터에게 반복 명령을 지시할 수 있습니다. 먼저 while문을 배우게 될텐데, while문의 기본 구성은 아래와 같습니다.


while (조건문) {

   조건이 참일때동안 실행되는 문장

}


while 괄호의 조건문에는 반복 조건이 옵니다. while문은 반복 조건이 참일때동안 안의 문장을 실행시키며 루프(loop)를 돕니다.


아래의 예제를 참고하여 while문의 실행 흐름을 파악해보세요.


class WhileLoop {

    public static void main(String[] args) {

        int i = 0;


while (i<10) {

System.out.println(i + "회 반복했습니다.");

i++;

}

    }

}


결과:

0회 반복했습니다.

1회 반복했습니다.

2회 반복했습니다.

3회 반복했습니다.

4회 반복했습니다.

5회 반복했습니다.

6회 반복했습니다.

7회 반복했습니다.

8회 반복했습니다.

9회 반복했습니다.


결과를 보시면 '~회 반복했습니다.'라는 문자열이 10번이나 출력됬죠? 코드로 돌아가, 3행에서 변수 i를 선언하고 그 값을 0으로 초기화 시켰습니다. 그런 뒤에 5행에서 while문이 등장하여, 10이 i보다 클때 계속 안의 문장을 실행하며 루프를 돕니다. 루프를 도는동안, 7행에서 i의 값을 1씩 증가하여 i가 10이 되는 순간 반복문을 탈출할 수 있게끔 해줍니다. 실행 흐름을 살펴보면,


조건문이 참인지 거짓인지 가림 -> 참일 경우에 안의 문장을 실행 -> 조건문이 참인지 거짓인지 가림 -> ...


위와 같습니다. 그런데 만약, 7행을 주석 처리하고 컴파일하게되면 어떤일이 벌어질까요? 


class WhileLoop {

    public static void main(String[] args) {

        int i = 0;


while (i<10) {

System.out.println(i + "회 반복했습니다.");

//i++;

}

    }

}


결과:

0회 반복했습니다.

0회 반복했습니다.

0회 반복했습니다.

0회 반복했습니다.

0회 반복했습니다.

0회 반복했습니다.

0회 반복했습니다.

0회 반복했습니다.

0회 반복했습니다.

...


결과를 보시면, 반복 조건이 i의 값이 아무런 변화가 없어 항상 참이되어 무한 루프에 빠집니다. 무한 루프에 빠지게 되면 while문 내의 문장을 프로그램이 종료될때까지 실행하며 심한 경우엔 운영체제가 먹통이 되는 상황에까지 이를수 있습니다. 그러므로, 무한 루프에 빠졌을 경우에는 조건식을 검사하고 while문 내의 코드를 살펴야 합니다.


일부 개발자들은 이런 무한 루프를 응용하여 프로그램을 만드는 경우도 있고, 덩치가 큰 프로그램을 만들다가 의도치 않게 무한 루프에 빠질 수 있습니다.


2. do~while


방금 배운 while문과 do~while문의 차이가 뭘까요? while문은 우선 조건 검사를 하고 영역 내의 코드를 실행시키지만 do~while문은 최소 한번은 실행시키고 조건을 검사합니다. do~while문이 필요없어 보일지도 모르겠지만, 자신이 프로그램을 개발하다 보면 최소 한번은 실행시켜야 하는 경우가 있습니다. while문으로 do~while문을 모두 대신할 수 있다면 굳이 do~while문이 만들어지지 않았겠죠?


do~while문의 기본 구성은 아래와 같습니다.

do {

   실행되는 문장

} while(조건문);


while문과는 달리 조건문이 뒤에 오죠? 최소 한번은 실행되는 do~while문의 실행 흐름을 예상해보자면,

영역 내의 코드실행 -> 조건문이 참인지 거짓인지 가림 -> 참일 경우 영역 내의 코드실행 -> ...


while문의 예제를 그대로 do~while문의 예제로 옮겼습니다.


class DoWhileLoop {

    public static void main(String[] args) {

        int i = 0;


do {

System.out.println(i + "회 반복했습니다.");

i++;

} while (i<10);

    }

}


결과:

0회 반복했습니다.

1회 반복했습니다.

2회 반복했습니다.

3회 반복했습니다.

4회 반복했습니다.

5회 반복했습니다.

6회 반복했습니다.

7회 반복했습니다.

8회 반복했습니다.

9회 반복했습니다.


결과를 살펴보면, while문의 예제와 다를게 없죠? 코드로 돌아가서, 5~8행을 보시면 do~while문이 사용됬고 do~while문은 조건에 맞지 않아도 최소 한번은 실행된다고 했습니다. 그런 뒤에 조건이 참인지 거짓인지 가려내어 참이면 다시 코드 영역으로 돌아가 문장을 반복합니다. do~while문에서 최소 한번이라도 실행한다는것을 제외하면 while문과 다를게 없습니다. 그런데도 do~while문이 사용되는 이유는 개발을 하다보면 while문이 필요할 때가 있고, do~while문이 필요할때가 생기기 때문입니다.


다음 강좌에서는 for, continue, break문을 배워보도록 하겠습니다.

  1. 김준영 at 2012.08.03 11:44 신고 [edit/del]

    올만에 초보가 잘따라하고 있습니다. ㅎㅎ

    Reply
  2. 오연수 at 2012.08.21 18:14 신고 [edit/del]

    자바가 어려울 줄 알았는데
    이렇게 쉽게 설명해 주시니
    정말 감사합니다.

    Reply
  3. 김승현 at 2012.10.04 02:34 신고 [edit/del]

    감사합니다~

    Reply
  4. jinlak at 2013.04.27 10:11 신고 [edit/del]

    감사합니다.

    Reply
  5. HIraga at 2014.07.29 20:55 신고 [edit/del]

    재밌게 정주행 중입니다.

    Reply

submit

티스토리 툴바