반복문에는 while, do while, for 세가지가 있다.
while 문은 처음에 조건식을 검사한다. 참이면(true) { } 안의 코드를 실행한다. 그리고 다시 조건식을 검사한다. 다시 참이면 { }안의 코드를 반복한다. 반복문을 루프(loop)라 한다. 쳇바퀴가 도는 것 처럼 계속 실행하는 것이다.
조건식이 거짓이 되면(false) { } 의 루프를 탈출한다. 보통 조건식에 카운터를 넣어 비교를 하고 중괄호 { } 안의 코드에 카운터를 증감시켜서 일정 회수를 반복하면 조건식이 false 로 바뀌도록 만든다. 조건식이 항상 참이면 무한 루프를 돌게 된다.
어떤 프로그램들은 실행중에 멈춰버리는 경우가 있는데, 오류가 발생하여 무한루프를 돌게되면 사용자가 키보드나 마우스로 프로그램의 제어를 할 수 없게된다. 모니터의 화면은 멈추지만 뒤에서 CPU는 연산을 무한히 반복하고 있는 것이다.
반복문을 사용하면 많은 경우 사람이 일일이 숫자값을 입력하는 수고를 덜어준다. 반복문을 알게 되면 컴퓨터의 막강한 연산 능력을 실감하게 된다. 한편으로 반복문을 효율적으로 사용하지 않으면 프로그램에 부하가 많이 걸려서 느려진다.
<예제>
long count = 1L; // 카운터를 1로 초기화
long sum = 0L; // 합계를 더할 sum 변수
while (count <= 1000000){
sum = sum + count;
count++;
}
System.out.println("합계 : " + sum);
*1부터 100만까지의 숫자를 더하는 코드이다. 컴퓨팅 파워를 보여주기 위해서 일부러 큰수를 사용했다. 최근의 CPU를 사용하고 있다면 1초도 안되서 계산이 출력되는 것을 볼 수 있을 것이다. (필자는 i7-4790을 사용하고 있음) int 형으로는 표현범위를 넘어버리니까 더큰 long 형을 사용해야 한다.
do while 문은 while문과 같다. 한가지 차이점은 while 문은 처음 조건식을 검사했을 때 false 가 되면 while 안의 코드가 한번도 실행되지 않고 빠져나가지만, do while 문은 최초 1번은 실행된다.
do {
code; // 한번은 실행된다.
} while (condition);
* do { } while(조건식); do 가 먼저 한번 실행되고 while 조건식을 검사한다. 이때 while(조건식) 뒤에 ; 세미콜론을 넣어야 오류가 안난다.
while 무한루프는 의미가 없을 것 같지만 실상 매우 많이 사용된다. 무한루프는 무의미한 동작을 반복하는게 아니라 사실 '대기한다' 라는 의미도 있다. 우리가 쓰는 윈도우즈 어플리케이션들은 다 무한루프를 돌고 있다.
크롬같은 인터넷 브라우저도 마찬가지다.
사용자가 키보드나 마우스를 입력할 때 까지 무한루프를 돌며 대기하고 있다가 마우스로 링크를 클릭하면 즉시 사용자의 입력값을 받아서 웹페이지를 다운받아서 화면을 갱신한다. 무한루프를 돌기 때문에 저절로 종료되는 것이 아니라 '프로그램 닫기' 버튼을 클릭하면 프로그램을 빠져나가도록 한다.
인터넷 세계를 24시간 돌아다니며 정보를 수집하는 크롤링 봇도 무한루프 하는 것이다.
입문단계면 무한루프는 여러가지 방법으로 사용할 수 있다는 점만 알아두자.
while(true) {
code; // 무한히 반복되는 코드
}
이클립스에서 무한루프를 탈출하려면 빨간 동그라미로 표시된 terminate 버튼을 누르면 된다. 콘솔에 따라 Ctrl + Z 키를 동시에 누르면 종료되는 경우도 있으나 이클립스에서는 키가 안먹힌다.