while

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

while (조건식) {
	// 조건이 참일 때 동안 실행되는 문장
}

while문은 괄호 안의 조건식이 참일 때 동안 while문 안의 문장들을 반복해서 수행합니다. 이를 '루프(loop)를 돈다'고 표현하기도 합니다. 만약, 조건식이 거짓이 되면 반복문을 빠져나옵니다. 아래의 예제를 확인하여 while문의 실행 흐름을 파악해보세요.

public class WhileExamples {
	public static void main(String[] args) {
		int i = 1;
		
		while (i <= 10) {
			System.out.println(i + "회 반복했습니다.");
			i++;
		}
	}
}

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

그런데 만약에 7행을 주석 처리하고 컴파일 후 실행하면 어떤 일이 벌어질까요? 

무한 루프(Infinite loop)

public class WhileExamples {
	public static void main(String[] args) {
		int i = 1;
		
		while (i <= 10) {
			System.out.println(i + "회 반복했습니다.");
            // i++;
		}
	}
}

결과를 보시면 아시겠지만, 변수 i의 값에 아무런 변화가 없어 조건식이 항상 참이되어 무한 루프에 빠집니다. 루프를 영원히 도는 무한 루프에 빠지게 되면 while문 내의 문장을 프로그램이 종료될 때까지 실행하게 됩니다. 만약에 프로그램이 무한 루프에 빠졌을 경우에는 조건식을 검사하고 while문 내의 코드를 제대로 살펴야 합니다.

이런 무한 루프는 보통 개발자의 실수로 의도치 않게 만들어지지만, 프로그램이 같은 작업을 계속해서 반복하여 실행하는 경우나 어떤 종료 조건을 만족할 때 무한 루프를 벗어나게끔 만드는 등 무한 루프를 의도적으로 사용하는 경우도 많습니다. 그럴 때는 보통 아래와 같이 표현하여 무한 루프가 의도적임을 나타낼 수 있습니다.

while (true) {
	// ...
}

do~while

방금 배운 while문과 do~while문의 차이가 뭘까요? while문은 우선 조건식을 검사하고 영역 내의 코드를 실행시키지만, do~while문은 처음 한 번은 무조건 실행시키고 조건을 검사합니다. do~while문의 기본 구성을 살펴보면 아래와 같습니다.

do {
	// 실행되는 문장
} while(조건식);

while문과는 달리 조건식이 뒤에 위치한 것을 볼 수 있습니다. 여기서 주의할 점은 do~while문에는 마지막에 반드시 세미콜론을 붙여야 합니다. 조건식의 참/거짓 여부와 상관없이 처음 한 번은 무조건 실행되는 do~while문의 실행 흐름을 순서도로 나타내자면 아래와 같습니다.

while문에서 사용된 예제에서 while문을 do~while문으로 바꾸면 아래와 같습니다.

public class WhileExamples {
	public static void main(String[] args) {
		int i = 1;
		
		do {
			System.out.println(i + "회 반복했습니다.");
			i++;
		} while(i <= 10);
	}
}

결과를 살펴보면, while문의 예제와 다를 게 없죠? 코드로 돌아가서, 5~8행을 보시면 do~while문이 사용됐고 do~while문은 조건식의 참/거짓 여부와는 상관없이 최소 한 번은 실행된다고 했습니다. 그런 뒤에 조건식이 참인지 거짓인지 가려내어 참이면 다시 do~while문 영역으로 돌아가 문장을 반복하게 됩니다.

'프로그래밍 관련 > 자바' 카테고리의 다른 글

12편. 메서드(Method)  (27) 2012.08.09
11편. 반복문 (2)  (11) 2012.08.08
9편. 제어문 (2)  (20) 2012.07.30
8편. 제어문 (1)  (16) 2012.07.30
7편. 연산자 (2)  (27) 2012.07.25