C나 C++ 프로그래밍에서 반복문은 코드를 여러 번 실행해야 할 때 필수적인 도구입니다. 그중 가장 많이 사용되는 while 루프와 do…while 루프는 비슷해 보이지만 동작 방식에 중요한 차이가 있습니다. 이 글에서는 두 루프의 기본 개념과 핵심 차이점을 예제 코드와 함께 살펴보겠습니다.
while 루프란?
while 루프는 주어진 조건이 참(true)인 동안 대상 문장을 계속해서 반복 실행하는 구조입니다. 조건 검사가 루프 본문 실행 이전에 이루어지기 때문에, 처음부터 조건이 거짓이라면 본문은 한 번도 실행되지 않을 수 있습니다.
기본 문법은 다음과 같습니다.
while(condition) {
statement(s);
}여기서 statement(s)는 단일 문장일 수도 있고 여러 문장으로 이루어진 블록일 수도 있습니다. condition은 어떤 표현식이든 올 수 있으며, 0이 아닌 값은 모두 참으로 간주됩니다. 조건이 참인 동안 루프는 계속 반복되고, 조건이 거짓이 되면 프로그램의 제어 흐름은 루프 바로 다음 줄로 넘어갑니다.
while 루프 예제
#include <stdio.h>
int main () {
/* 지역 변수 선언 */
int a = 10;
/* while 루프 실행 */
while( a < 20 ) {
printf("value of a: %d\n", a);
a++;
}
return 0;
}실행 결과
value of a: 10 value of a: 11 value of a: 12 value of a: 13 value of a: 14 value of a: 15 value of a: 16 value of a: 17 value of a: 18 value of a: 19
변수 a가 10부터 시작해 조건 a < 20이 참인 동안 출력과 증가를 반복하다가, a가 20이 되는 순간 루프를 빠져나옵니다.
do…while 루프란?
for 루프나 while 루프가 루프 시작 부분에서 조건을 검사하는 것과 달리, do…while 루프는 루프의 끝부분에서 조건을 검사합니다. 이 구조적 차이 때문에 do…while 루프는 조건과 관계없이 최소 한 번은 반드시 실행된다는 것이 보장됩니다.
기본 문법은 다음과 같습니다.
do {
statement(s);
}
while( condition );조건식이 루프 끝에 위치하기 때문에, 루프 내부의 문장들은 조건이 평가되기 전에 먼저 한 번 실행됩니다. 이후 조건이 참이면 제어 흐름이 다시 do로 돌아가 문장들을 반복 실행하고, 이 과정은 조건이 거짓이 될 때까지 계속됩니다.
do…while 루프 예제
#include <stdio.h>
int main () {
/* 지역 변수 선언 */
int a = 10;
/* do 루프 실행 */
do {
printf("value of a: %d\n", a);
a = a + 1;
} while( a < 20 );
return 0;
}실행 결과
value of a: 10 value of a: 11 value of a: 12 value of a: 13 value of a: 14 value of a: 15 value of a: 16 value of a: 17 value of a: 18 value of a: 19
위 예제에서도 같은 결과가 출력되지만, 만약 초기값이 a = 25처럼 조건을 이미 벗어난 값이라면 while 루프는 아무것도 출력하지 않는 반면, do…while 루프는 "value of a: 25"를 한 번 출력한 뒤 종료됩니다. 이것이 두 루프의 결정적인 차이입니다.
while 루프 vs do…while 루프 비교표
두 루프의 차이점을 표로 정리하면 다음과 같습니다.
| while 루프 | do…while 루프 |
|---|---|
| 선검사(entry-controlled) 루프입니다. 루프에 진입하기 전에 조건을 검사합니다. | 후검사(exit-controlled) 루프입니다. 루프를 빠져나올 때 조건을 검사합니다. |
| 조건에 따라 0번 또는 그 이상 실행될 수 있습니다. | 최소 한 번은 반드시 실행되며, 그 이상 반복될 수 있습니다. |
| 조건에 사용되는 변수는 루프 진입 전에 반드시 초기화되어야 합니다. | 루프 조건 변수는 루프 내부에서 초기화할 수도 있습니다. |
while(condition){
//statement
} | do{
//statement
}while(condition); |
마무리
정리하자면, while 루프는 조건을 먼저 확인한 후 실행 여부를 결정하는 안전한 반복문이고, do…while 루프는 일단 한 번 실행한 뒤 계속할지 판단하는 구조입니다. 메뉴 화면처럼 최소 한 번은 반드시 보여줘야 하는 경우에는 do…while 루프가 적합하고, 조건에 따라 아예 실행되지 않아야 하는 경우에는 while 루프를 사용하는 것이 좋습니다. 상황에 맞는 루프를 선택하면 더욱 명확하고 효율적인 코드를 작성할 수 있습니다.