반복문
컴퓨터는 본래 반복적인 계산을 빠르게 계산하기 위해 만들어진 장치이며, 프로그래밍 언어에도 반복을 위한 문법이 포함되어 있습니다.
For Loop
#include <stdio.h>
int main(int argc,char** argv)
{
int i=0;
int sum = 0;
for(i=0 ; i<4 ;i++)
{
sum +=i;
}
}
for( initialization ; condition ; increase )
{
~처리할 내용
}
- initialization : 초기화 시점으로 for 루프에 진입할 때 1회 실행됩니다. 매개 변수로 사용할 새로운 변수를 선언하거나 기존 변수를 사용할 수 있습니다.
- C 에서는 이곳에서 변수를 선언하는것이 허용되지 않습니다. C는 함수 내의 선언부에서만 지역변수를 선언할 수 있기 때문입니다.
- condition : 매개 변수에 대한 비교 조건을 기술합니다. true 인 경우 반복 시행됩니다.
- increase : condition 에 사용될 매개 변수를 제어합니다.
For Loop - initialization
#include <stdio.h>
int main(int argc,char** argv)
{
int sum = 0;
for(int i=0 ; i<4 ;i++)
{
sum +=i;
}
}
C++는 코드 중간에 변수를 선언하는것을 허용합니다. 예제 같은 형태의 초기화문이 가능하며, 이 매개변수가 Scope 내에서만 사용되도록 하여 안전한 반복문을 가능하게 합니다.
변수 선언 및 초기화 선언 외에도, 비워두거나 함수 호출을 할 수 있습니다.
For Loop - condition
조건식이 참인지 거짓인지를 판정합니다. 만일 이 값이 참일 경우, 괄호로 묶인 블록안의 내용이 처리됩니다.
거짓일 경우 이 for 문 블록을 빠져나가게 됩니다.
함수 호출 혹은 비워두어도 상관없으며, 비워 둘 경우 항상 참으로 처리됩니다.
#include <stdio.h>
int main(int argc,char** argv)
{
int i=0;
int sum = 0;
for(i=0 ; ;i++)
{
if( i > 4)
break;
}
}
이러한 경우 언젠가는 이 for 문을 탈출하여야 하므로
예제 for2의 경우처럼 중간에 조건분기를 넣어 특정 조건에서 탈출할 수 있도록 해 주어야 합니다.
- break 키워드를 사용할 수 있습니다.
그렇지 않다면 무한하게 같은 일을 반복하며, 이는 OS 및 다른 응용프로그램에게 지장을 주게 됩니다.
- 현대의 프로그램들은 상호 협력적 관계이며, 자신이 자원을 쓰지 않는다면 다른 프로그램이 사용할 수 있도록 양보해 주어야합니다.
For Loop - increase
주로 매개변수를 조작하는 식들이 포함됩니다. i++나 i--같은 식이 포함됩니다.
이 역시 함수호출을 하거나 비워두어도 상관없습니다.
단, 비워 둘 경우 무한루프를 회피하기 위해 처리할 내용의 어딘가에 for 문 매개변수를 조작하는 부분이 있어야 합니다.
While
#include <stdio.h>
int main(int argc,char** argv)
{
int k = 0;
while(k<5)
{
k++
}
}
while 문은 for 문에 비해 굉장히 단순한 반복문입니다.
while(condition)
{
~처리할 내용
}
의 형태로 사용되며, condition 이 true 인 동안 계속해서 반복처리를 실행합니다.
while 문은 매개변수를 통한 제어가 아닌, 특정 조건을 만족하는 경우에 대해서 처리하기 적합하게 되어 있습니다.
매개변수의 제어에 관한 호출이 빠져있기 때문에, 통상적으로 while 문은 for 문보다 빠릅니다.
- 상기 예제에서 사용한 while 문은 매개변수를 만들어 제어를 하고 있으므로 사실상 for 문과 다르지 않습니다.
#include <stdio.h>
int main(int argc,char** argv)
{
int k = 0;
while(1)
{
k++;
if(k > 5)
break;
}
}
많은 경우, while(1) 혹은 while(true)로 무한 반복을 만들어 놓고, 특정 조건이 되었을때 break 로 루프를 빠져나가게 하는 형태를 보시게 됩니다.
이러한 경우는 별도의 카운팅 매개변수가 필요없는 경우에 해당하며, 메세지 루프나 우리가 사용하는 GUI 형태의 프로그램의 무한루프를 작성할 때 사용됩니다.
Do While
#include <stdio.h>
int main(int argc,char** argv)
{
int k = 0;
do
{
k++
}while(k<5);
}
do while 문은 while 문과 비슷한 구조를 가집니다.
do
{
~처리할 내용
} while(condition);
while 문과의 가장 큰 차이점은 반드시 1회는 실행이 보장됩니다. while 의 경우 조건문을 점검하고 블록 안의 코드를 실행하지만, do while 의 경우 블록 안의 코드를 실행한 후 조건문을 점검합니다.
Range-based for-loop (C++11)
C++11의 range-based for-loop 를 지원한다면 위와 같은 for 문의 반복문을 사용할 수도 있습니다.
다른 언어들의 foreach 와 같은 맥락의 반복문으로써, 범위가 있는 매개 변수에 대해서 그 횟수만큼 반복해주는 반복문입니다. 배열형을 사용하거나, class 에서 begin(), end()의 메소드를 제공할 수 있는 경우에 대해 사용할 수 있습니다.
int &n은 해당하는 배열을 레퍼런스로 순회하겠다는 의미이며, int n으로 사용할 수도 있습니다.
- 이 경우에는 값이 복사됩니다.
제어 - break / continue
break 와 continue 키워드를 이용하여 반복문을 제어할 수 있습니다.
#include <stdio.h>
int main(int argc,char** argv)
{
while(1)
{
k++;
break;
if(k > 5)
break;
}
}
break 키워드를 사용하면 해당 지점에서 루프 블럭을 탈출합니다.
if(k > 5)
break;
위의 구현부는 실행되지 않고 바로 while 문이 종료됩니다.
#include <stdio.h>
int main(int argc,char** argv)
{
while(1)
{
k++;
continue;
if(k > 5)
break;
}
}
continue 키워드를 사용하면 해당 지점에서 루프 블럭 가장 마지막 위치로 이동합니다.
if(k > 5)
break;
마찬가지로, 위의 구현부는 실행되지 않고 다시 k++; 로 이동하여 루프문이 지속됩니다.
- 예제의 경우 무한루프에 빠지게 됩니다.