while 루프 C++
목차
오래간만에 스무디코딩 포스팅을 업데이트 합니다. 다루어야 할 언어가 많은데 그 중에 C++은 가장 좀 핵심적인 언어라고 할 수 있습니다. 어떤 언어를 배우더라도 C++의 문법과 구조에 대해서 알고 있다면 장기적으로 큰 도움이 될 것 입니다.
C++ 의 루프 문법은 현대 언어인 Java, Javascript 등 많은 언어들에 영향을 끼쳤습니다.
컴퓨터 프로그래밍 언어는 수많은 종류가 있지만 CPU와 메모리를 다루는 것이라는 동일성을 가집니다. 다시 말하면 어떤 프로그래밍 언어라도 기본이 되는 동작 패턴이 있다는 말인데요.
루프라는 것은 반복문입니다. 영어로는 while loop, iterate 으로 검색하면 풍부한 검색결과를 볼 수 있는데요. 대부분의 프로그램은 어떤 코드의 동작을 여러번 반복함으로써 작동합니다.
예를 들어 슈팅게임을 시작하면 게임의 메뉴를 선택하고 키보드로 플레이어를 조작 합니다. 이 과정을 분해해보면 사용자는 방향키를 누르고 미사일을 쏘는 동작을 여러번 합니다. 여러번 한다는 것은 게임의 루프가 돌아와서 사용자가 키를 입력할 수 있는 상태로 계속 돌아오면서 진행이 된다는 말입니다. 게임이 종료될때까지 이 루프는 계속되고 사용자가 게임에 영향을 미칠 수 있는 키를 입력할 수 있는 동안을 게임의 실행시간이라고 합니다. 사용자가 오른쪽 키를 입력하고 다음 위쪽키를 입력하고 이는 각각 하나의 루프에 해당합니다.
C++로 개발하는 거의 대부분의 게임은 while 루프를 사용해서 구현합니다. 이는 while 문법이 있는 자바나 파이썬 등 다른 언어도 동일합니다.
기능적으로는 for 문이나 while 문 동일한 작업을 할 수 있습니다만, 대체적으로 for 문은 루프 횟수를 잘 알고 있을 때 사용하고 while 문은 어떤 조건에 도달할 때까지 루프해야 할 때 사용합니다.
초보자가 어떤 경우에 for 루프, while 루프를 사용해야 하는지는 고민이 되는 부분입니다만, 경험을 하다보면 쉽게 알 수 있을 겁니다. 동작적인 부분보다는 가독성이나 문맥의 이해도를 고려해서 선택할 수 있습니다.
while 문의 구조
while 문의 구조는 아래와 같습니다.
while (표현식 검사) body(while 문 몸체)
while 문 표현식의 검사 결과는 true 아니면 false 입니다. true 참인 경우에 body 를 실행하고 false 인 경우 실행하지 않고 while 문을 벗어납니다. for 문과 마찬가지로 { } 중괄호로 블록을 지정해서 사용합니다. 괄호가 없는 경우 while 다음의 한 문장만 실행합니다.
다음의 예제는 영문이름을 입력받고 알파벳에 대응하는 아스키 코드와 글자수를 출력합니다.
문자형 배열에 영문이름을 입력하면 각각의 글자에 해당하는 아스키 코드를 출력합니다. cin의 연산자를 문자형 배열에 사용하면 공백문자를 만날 때 널문자 \0 를 추가해서 저장합니다.
#include <iostream> using std::cout; using std::cin; using std::endl; int main() { char name[30]; cout << "영문 이름을 입력하시오 : "; cin >> name; int i = 0; cout << "[아스키 코드를 출력합니다.]" << endl; while (name[i] != '\0') { cout << name[i] << ": " << int(name[i]) << endl; i++; } cout << "글자수: " << i << endl; return 0; } [실행결과] 영문 이름을 입력하시오 : John [아스키 코드를 출력합니다.] J: 74 o: 111 h: 104 n: 110 글자수: 4
배열이나 포인터의 인덱스를 사용할 때 0부터 N까지의 숫자를 반복할 때 for 문을 자주 사용합니다. while 문도 동일하게 만들 수 있는데 for 문보다는 직관성이 좀 떨어집니다. 아래와 같은 경우 for 문을 사용하는게 낫죠. 하지만 뭐 꼭 정해진 것은 아닙니다.
코드는 자기가 속한 직장이나 혹은 개발자 커뮤니티에 영향을 받기 때문에 서로 협의를 거친 스타일로 작성하는 것을 권합니다. 여기서 이야기하려는 것은 절대적인 기준은 없다. 그래서 while 문과 for 문에 혼동하는 사람이 있을 수 있지만 이는 C++이 사용자에게 주는 자유입니다. 물론 while 문과 for 문 두 개의 루프에 어울리는 상황을 판단할 필요는 있습니다.
#include <iostream> using std::cout; using std::endl; int main() { int i = 0; while (i < 5) { cout << "숫자 #" << i + 1 << endl; i++; } return 0; } [실행결과] 숫자 #1 숫자 #2 숫자 #3 숫자 #4 숫자 #5
또 다른 예제는 Windows.h 의 sleep 함수를 사용하여 초단위로 표시하는 코드입니다. 실행결과가 1초마다 실행되는 것을 볼 수 있어서 반복이 이루어지고 있다는 사실을 체감할 수 있습니다. 사실 컴퓨터의 루프는 워낙 빠르게 실행되기 때문에 이게 반복이 되는 건지 잘 느낌이 오지 않는데요. 시간지연 코드를 사용하면 쉽게 이해가 됩니다. 실행을 종료하고 싶다면 운영체제에 따라 Ctrl + Z 나 Ctrl + C를 클릭하면 됩니다.
#include <iostream> #include <Windows.h> using std::cout; using std::cin; using std::endl; int main() { int i = 0; int t1 = 0; cout << "지연할 초를 입력하시오. " << endl; cin >> t1; while (i < t1) { Sleep(1000); i++; cout << "시간# : " << i << " 초" << endl; } return 0; } [실행결과] 지연할 초를 입력하시오. 5 시간# : 1 초 시간# : 2 초 시간# : 3 초 시간# : 4 초 시간# : 5 초
요약
while 루프 C++의 기본에 대해서 알아봤습니다.
for문을 이해했다면 while 문도 쉽게 이해할 수 있을 것 입니다. 알고리즘 학습을 하거나 혹은 개인 프로젝트를 하면서 while 문의 사용방법에 대해서 더 많은 것을 배울 수 있습니다.
문법은 물론 중요하지만 실전을 통해서 최대한 많은 연습을 하는 것을 추천합니다. 실전이라고 해서 거창한게 아니라 자료구조의 구현이나 그냥 간단한 게임 같은 것도 괜찮습니다.
중요한 것은 직접 while 문을 사용해보면서 어떤 상황에 while 문을 써야 옳을지 선택하는 것 입니다.
참고문서
while 루프 C++ | goto, continue, break, do while
C++ While Loop (w3schools.com)
While loop in C++ with example (beginnersbook.com)
C++ while and do…while Loop (With Examples) (programiz.com)