2011년 4월 27일 수요일

자바의 제어문(while)

while loop이라고 불리는 반복문 while에 대해서 알아보자. 자바의 반복문을 공부하다 보면 for를 써야될지 while을 써야될지 고민(?)에 잠기는 이가 많다. 오늘 강좌를 열심히 파다보면 그 의문(?)이 풀릴지도 모른다는 기대를 하면서 평소처럼 계속 전진해 보기 바란다.^^ 자바에서 while은 코드상으로 아래와 같이 표현된다.

while (조건문)
{
명령문1;
명령문2;
...
......
}

while문은 조건문이 true인 동안에는 { } 안의 명령들이 실행되면서 for문처럼 반복된다. for문의 경우 초기식과 증감식을 수식(괄호안)에 써주어야 하나 while은 수식에 참인지 거짓인지를 판단하는 조건문만 써주면 되고 증감식을 { } 내부에 쓸수가 있어 좀더 다양한 표현이 가능하다고 할수 있겠다. 반복문을 실행할때 단순히 해당 명령문을 n번 실행하는 것으로 해결이 안되는 복잡한 경우가 있는데 그럴 경우 for 대신에 while을 쓴다. 그러나 확실한 범위를 알고 초기식과 증감식이 명확할 경우 for문을 쓰면 된다. while과 for는 하는 일이 같으나 위와 같은 차이점들이 있다. 프로그램을 짤때 for문으로 시도를 해보고 그래도 문제가 있으면 while문으로 고쳐서 문제해결을 시도하면 될 것이다. 예제를 통해 while문에 대해서 좀더 알아보기로 하자.


그냥 예제만 봐도 이해가 될것이다. for문의 for (int i=0; i<=2; i++) 과 똑같은 식이 된다. 처음에 0을 넣어 비교해서 참이면 안의 명령들을 실행하고 while문으로 돌아와 1을 넣고...3을 넣을때는 거짓이므로 while문을 빠져나오며 프로그램이 종료된다. 따라서 결과값은 0 1 2 가 될 것이다. for문을 벌써 습득(?)한 여러분에겐 문제될게 없으리라 본다.^^

while도 다중 for문처럼 여러개의 while을 쓰는 것이 가능하다. 여기서는 두개만 써서 가능하다는 것만 보여주겠다.


코드를 입력하고 결과를 예상해보고 준비되었으면 실행해 보도록 한다.

0
1
2
i의 값은 0입니다.
0
1
2
i의 값은 1입니다.
0
1
2
i의 값은 2입니다.

간단히 요약하면 i가 한번 돌아갈때 j는 세번씩 돌아가는 프로그램이다. 이번에는 while보다는 쓰는 빈도가 약하지만 유용하게 쓰일수 있는 do while 구문에 대해서 알아보기로 하겠다.

do
{
명령문1;
명령문2;
...
...
}
while (조건문); //끝에 세미콜론을 붙인다는 것을 잊지말자!


공식은 위와 같으며 while문과 다른점은 조건문을 묻기전 do { } 안에 있는 명령문들을 참과 거짓에 관계없이 즉 조건문이 false가 되더라도 일단 한번 실행한다는 것이다. 그리고 조건문을 비교하고 참이면 do { } 안에 있는 명령문들을 기본 while문처럼 계속 반복하고 조건문이 거짓이 될때 do while문을 빠져나오며 프로그램이 종료된다. 아래의 예제를 보면 이해가 쉬울 것이다.


do while 조건문을 보기에 앞서 프로그램 코드 순서대로 진행하면 큰 무리가 없을 것이다. 처음에 i 값이 0으로 주어져서 0을 출력하고 i에 1을 더했다. 그리고 조건문에서 i가 1보다 작거나 같은지를 묻는다. 지금 i값은 1이므로 true가 성립하고 다시 do 블록안으로 들어가서 i값인 1을 출력한다. 그 다음 1을 증가시키고 i값이 2가 된 상태에서 조건문을 만난다. 이번에는 조건문이 거짓이므로 do while문을 빠져나오고 프로그램은 끝난다. 아~ 심플하다. ^^ 따라서 결과는 이렇게 될것이다.

i의 값은 0입니다.
i의 값은 1입니다.

for문에 비해서 수식이 간단하므로 오히려 while문이 쉽게 느껴질 것이다. 진도를 더 나갈까 하다가 여러분의 피곤이 심히 누적(?)된듯하여 오늘은 그만하겠다. 자바의 제어문 중에서 반복문 역시 쓰이는 비중이 아주 높다. 반복문을 쓰지 않아도 프로그램은 가능할 것이다. 그러나 같은 코드를 5번 10번 쓸것이냐 아니면 반복문 하나를 짜서 다 커버할 것이냐고 묻는다면 바보(?)가 아닌 이상 for문이나 while문은 반드시 어떻게 사용하는지 알아야한다. 빨리 끝낸만큼 남는시간을 더 알차게 쓰기 바란다. 이상~ ㅎㅎ

댓글 없음:

댓글 쓰기