지난 포스팅에서는 반복문 중 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만 쓰라는 교수님&선생님이 종종 있다고 들었다. 나는 정말 그 이유가 궁금하다. 각 반복문이 적합하게 쓰이는 경우가 다르기 때문에 금지할 것이 아니라, 상황에 따라 잘 판단할 수 있도록 지도했으면 좋겠다.
'C++ 기초' 카테고리의 다른 글
Makefile 기초 (0) | 2023.04.11 |
---|---|
[C/C++] 6. 엔트리 포인트(Entry point)(feat. argc/argv) (0) | 2021.04.05 |
[C/C++] 4. 반복문(Iteration statements) - for문(for loop) (0) | 2021.03.29 |
[C/C++] 3. 조건문(Conditional statement) (0) | 2021.03.18 |
[C/C++] 2. 타입과 연산자(Type & Operator) (0) | 2021.03.12 |
댓글