do..while


while문은 또 다른 타입인 do..while 반복문법인 선순의 반복문을 지원합니다. while 반복문은 처음 반복을 수행기 전에 조건이 참(true)인 경우에만 반복문법 코드가 실행이 됩니다.

하지만 반복문을 수행하기 전에 최소한 한 번은 반드시 수행하고, 이후에 조건에 따라서 반복을 수행해야 할 경우가 코드 작성 시 종종 필요하게 됩니다.

다음은 do while문의 작성 문법입니다.

|문법|

 do{

  } while( 조건);

do..while의 반복 문법을 보면 while과 다르게 while(참 조건); 부분이 { } 하단에 적혀 있는 것을 확인할 수 있습니다. 즉, 조건을 검사하기 전에 한번은 { } 부분을 처리하라는 의미입니다.

다음 예제는 $x 값이 1부터 5까지 출력하는 반복문입니다. 반복문 안에서는 $x 값을 1씩 더해주면서 화면에 숫자를 표시합니다. 그리고 5 값이 넘으면 while 반복문을 종료합니다.

예제 파일 dowhile-01.php

<?php
	$x = 1;

	do {
    	echo "The number is: $x <br>";
    	$x++;
	} while ($x <= 5);
?>

결과

The number is: 1
The number is: 2
The number is: 3
The number is: 4
The number is: 5

하지만 아래 예처럼 $x의 초기값이 6일 때는 어떻게 될까요? do..while문에서는 먼저 6 값을 화면에 출력하고 while 조건문을 검사합니다. $x 값이 5보다 크기 때문에 다음 반복을 하지 않고 끝나게 됩니다.

예제 파일 dowhile-02.php

<?php
	// 초기값을 6으로 설정합니다.
	$x = 6;

	do {
   		echo "The number is: $x <br>";
    	$x++;
	} while ($x <= 5);
?> 

결과

The number is: 6

즉, 조건과 상관없이 { } 안의 명령을 한 번은 수행을 한다는 특징이 있습니다.


break


break; 명령문은 앞서 설명한 조건 switch문과 더불어 반복문의 제어 흐름을 처리하는 데도 종종 사용됩니다.
break;문의 특징은 break;를 감싸고 있는 조건이나 반복문의 중괄호 { }를 빠져나온다는 것입니다.


무한 루프 탈출


while 반복문을 통해 무한 루프 동작을 하고 있을 때 프로그램은 어떻게 무한 루프를 탈출할 수 있을 까요? while문의 반복되는 코드 블록 중괄호 {} 안에 break;를 처리하면 무한 반복문의 루프를 탈출할 수 있습니다.

예제 파일 break-11.php

<?php
	while(1){
    	
    		if ($i<10) {
      			echo "10보다 작으면 무제한 반복합니다.<br>";
    		} else {
      			echo "조건이 10보다 크기 때문에 조건을 빠져나갑니다.<br>";
      			break;
    		}
  		
  		$i++;
	}
?> 

결과

10보다 작으면 무제한 반복합니다.
10보다 작으면 무제한 반복합니다.
10보다 작으면 무제한 반복합니다.
10보다 작으면 무제한 반복합니다.
10보다 작으면 무제한 반복합니다.
10보다 작으면 무제한 반복합니다.
10보다 작으면 무제한 반복합니다.
10보다 작으면 무제한 반복합니다.
10보다 작으면 무제한 반복합니다.
10보다 작으면 무제한 반복합니다.
조건이 10보다 크기 때문에 조건을 빠져나갑니다.

위의 예를 보면 while 반복문의 조건 값은 상수 1입니다. 항상 참(true) 조건입니다. 따라서 while문은 중괄호 { } 내용을 프로그램을 강제로 종료하기 전까지는 반복합니다.

하지만 반복문 안에 if 조건을 넣어서 또 다른 내부 조건이 만족하게 되면 break;문을 실행합니다. 따라서 무한 반복문이더라도 $i 값을 1씩 증가하면서 화면에 출력하다가 10이 넘으면 break문을 만나서 무한 루프를 탈출하게 됩니다.

무한 루프는 외부 통신 등 값을 기다리면서 반복을 처리하는 동작에 매우 유용합니다. 다음은 파일 읽기 예제입니다.

예제 파일 break-12.php

 <?php
    $myfile = fopen("readme.txt", "r");
 
    while(1) {
        if (!feof($myfile)) {
            echo fgets($myfile) . "<br>";
        } else {
            break;
        }  
    }
    fclose($myfile);
?>

보통 파일의 크기는 매우 다양해서 알 수가 없습니다. 크기가 다들 크기들이 제각각입니다. 이럴 때 while의 무한 반복문은 편리합니다. 파일을 글자 하나씩 읽어서 화면에 출력합니다. 이러한 동작을 무한 루프를 통해 반복합니다.

만일 읽은 파일의 끝을 나타내는 EOF 문자를 만나면 파일 화면 출력 무한 루프를 끝내고 break;를 처리하여 반복을 중단합니다.


반복문 강제 종료


break;문은 while 반복문 이외에 for 반복문에서도 사용이 가능합니다. for처럼 반복의 횟수를 정하여 반복 작업을 하더라도 특정한 조건에 따라 더 이상 반복을 처리하지 않아도 될 때 break;문을 통해 for 반복문을 종료, 탈출할 수 있습니다.

예제 파일 break-13.php

<?php
	for ($i=0;$i<10;$i++) {
	
		if ($i>=6) {
			break;
		}

		echo $i."<br>";
	}

	echo "종료";
?>

결과

0
1
2
3
4
5
종료

위의 예를 보면 for 반복문을 이용하여 프로그램은 0부터 9까지의 숫자를 한 줄씩 출력합니다. 하지만 실제 출력은 0~5까지만 출력이 됩니다. 왜 그럴까요?

정상적으로 10번 반복하지만 중간에 $i 값을 검사하여 6 값보다 크면 for문을 끝내고 다른 명령으로 처리되어 넘어갑니다.

이처럼 break;를 이용하면 반복문을 강제로 종료할 수도 있고 불필요한 작업을 방지하고 반복 루트를 중간에도 탈출을 할 수 있습니다.