본문 바로가기
C++ 기초

[C/C++] 5. 반복문(Iteration statements) - while문(while loop)

by 서아랑😍 2021. 4. 3.
더보기
반복-loop(출처: https://wearetheloop.org/about-the-loop)

 

 

지난 포스팅에서는 반복문 중 for문에 대해서 알아보았다. 이번 글은 반복문의 또 다른 종류인 while문에 대해서 알아보겠다.

 

while문과 for문 모두 반복을 진행한다는 점에서는 같은 부류이고, 쓰이는 방식만 다르고 같은 반복을 for, while모두 구현 가능하다. 그렇지만 반복해야 상황에 따라서 for나 while 중 적합한 것을 골라서 사용하면 된다.

 

// while의 경우는 무한반복을 사용할 때 많이 쓰이기도 한다.

 

# While문

while(논리조건)
{
	반복 진행 구문
}

 

기본적인 while문은 위와 같이 논리조건이 true인 경우에 반복 진행 구문을 진행한다. 논리조건이 프로그램이 끝날 때 까지 true를 유지한다면 무한 반복을 진행할 것이다.

 

// C++
#include <iostream>

int num = 0;
while(num < 10)
{
	std::cout << num;
	num++;
}
더보기

출력:

0123456789

 

위 예제는 0부터 9까지 while을 사용해서 출력하는 코드이다. num < 10인 경우만 반복을 진행하기 때문에 num이 10이 되는 순간 while을 빠져 나간다.

 

// C++
#include <iostream>

int num = 0;
while(true)
{
    if ( num == 10 )
        break;
        
    std::cout << num;
    num++;
}
더보기

출력:

0123456789

 

위 예제도 마찬가지로 0부터 9까지 while을 사용해서 출력한다. 다만 이전 예제와 다른점은 while조건문은 항상 true로 놓고 num이 10일 경우 break구문을 통해서 빠져나가는 방식이다.

 

// break구문에 대한 설명은 이전 포스팅에 작성해놓았다.(2021.03.29 - [C&C++] - [C/C++] 4. 반복문(Iteration statements) - for문(for loop))

 

 

// C++
#include <iostream>
#include "Something.h"

while(true)
{
    sleep(1);
    DoSomething();
}

위 예제는 1초마다 DoSomething() 함수를 호출해서 지정된 작업을 진행하는 코드이다. while을 빠져나가는 어떠한 흐름제어가 없기 때문에 위 코드는 무한 반복을 진행하게 된다.

 

보통 서버 프로그래밍에서 쓰이는 방식으로 여러 개의 스레드에서 무한루프를 돌면서 작업을 진행한다.(무한 반복이 종료되는 경우는 프로세스를 종료할 때 뿐이다.)

 

만약 무한 반복을 효율적으로 만들지 못한경우에는 프로세스 리소스 사용량이 지나치게 증가한다거나 스레드 충돌이 발생할 수 있으므로, 신중하게 작업해야 한다.

 

// sleep은 윈도우에서는 ms단위이고 리눅스에서는 sec단위이다. 위 예제는 리눅스 기준으로, 윈도우에서 사용할 경우 sleep(1000)으로 사용해야 한다.

 

#Do while

// C
#include <stdio.h>

int num = 10;

do
{
    // 반복진행 구문
    printf("num=%d\n", num);
}
while(num > 10);
더보기

출력:

num=10

 

while과 형제라고 부를 수 있는 do-while문이다. while과 다른 점은 무조건 do를 먼저 한번 실행하고 이후 while조건문을 판단해서 조건식이 true이면 do의 반복진행 구문을 실행해나간다.

 

위 예제에서는 num변수가 while조건식에 해당하지 않지만 do를 먼저 실행하기 때문에 출력이 되는 모습을 볼 수 있다.

 

// C
#include <stdio.h>

int num = 10;

do
{
    // 반복진행 구문
    printf("num=%d\n", num);
    num--;
}
while(num > 4 && num < 10);
더보기

num=10

num=9

num=8

num=7

num=6

num=5

이번 예제에서는 초기화된 num의 값은 while조건문에 부합하지 않지만, 첫 do에서 num--를 통해 while조건문을 만족하게 되고 진행되는 모습이다.

 

위의 코드를 do없이 while만 진행해보면 어떨지 생각해보자.

 

# 가끔 학생들을 만나 이야기 해보면 시험문제에서 for를 금지하고 while만 쓰라는 교수님&선생님이 종종 있다고 들었다. 나는 정말 그 이유가 궁금하다. 각 반복문이 적합하게 쓰이는 경우가 다르기 때문에 금지할 것이 아니라, 상황에 따라 잘 판단할 수 있도록 지도했으면 좋겠다.

 

댓글