for Loop
for 루프
- 각 루프 주기에 진입할 때마다 조건 검사 표현식이 평가된다는 점에서 Entry-Condition Loop (진입 조건 루프)에 해당된다.
- 진입 조건 루프의 경우 실행하기 전에 조건을 먼저 검사하는데, 이는 문제가 생기는 것을 일부 예방하는 효과가 있다.
- for은 키워드 뒤에 소괄호가 붙는다는 점에서 함수로 오인할 수 있다. 하지만 for은 C++의 Keyword(키워드)이며 컴파일러는 for을 함수라 여기지 않는다. 같은 이유에서 프로그래머는 "for"라는 함수를 생성시킬 수 없다.
* 일반적인 C++ 작성 스타일
- for과 소괄호 사이에는 한 칸을 띄우고, 함수명과 소괄호 사이는 띄우지 않는다.
(이는 문법이 아닌, 단지 C++코드 작성 스타일이다.)
- 루프 몸체는 한 탭 들여씀으로써 그것이 루프 몸체임을 드러내게한다.
for (k = 1; k < 5; k++) // 키워드와 소괄호 사이에 한 칸의 공백
FuncSummation(k); // 공백 없음
for 루프의 실행 순서 (첫 번째 Cycle)
+ 초기화, 검사, 갱신 구문들은 각각 세미콜론(;)으로 구분된다.
(비어있는 표현식(구문)도 사용할 수 있으나, 세미콜론은 반드시 2개가 필요하다.)
1. Loop Initialization (루프 초기화)
- 루프가 처음 실행될 때 단 한 번만 실행되는 구문이다.
- 루프를 가동하는 데 필요한 변수들(카운터 값 등)의 선언 및 초기화가 이루어지는 부분이다.
- 여기서 선언된 변수들은 루프가 종료되면 소멸된다.
+ 일부 C++버전에서는 초기화 부분에서 선언된 변수를 루프 밖에서 선언된 것이라 간주하고, 루프가 종료되어도 변수를 소멸시키지 않는다. 따라서, 루프 초기화 부분에서 선언된 변수의 수명은 C++버전에 따라 상이할 수 있다.
* Bending the rules
- C에서의 for구문의 루프 초기화 부분에서는 원래 변수의 선언이 불가능했으나, for구문이 C++로 계승되면서 변수 선언을 가능하게 했다.
- 본래, for구문의 제어 부분에는 표현식만 허용하는데, 변수 선언문은 표현식이 아니라는 이유로 변수를 선언하는 것을 불허했었다.
2. Loop Test (루프 조건 검사)
- 루프를 계속해서 진행할 것인지에대한 조건을 검사한다.
- 조건 문장이 True를 반환하면 루프를 진행하며 그렇지 않으면 루프를 탈출한다.(진행하지 않는다.)
- 조건 검사 표현식을 생략하면 컴파일러는 True로 해석한다.
* Forever Loop (무한루프)
for ( ; ; ) {
Loop Body
}
3. Loop Body (루프 몸체)
- 반복시킬 구문들이 여기에 배치된다.
- 조건 검사 결과가 True인 경우에만 수행된다.
- 몸체에 해당되는 구문이 한 줄이라면 중괄호를 생략하는 것이 가능하지만 권장되는 부분은 아니다.
- 루프 몸체부분에서 변수를 선언하게 되면 프로그램 실행 속도에 영향을 미칠 수 있으므로, 가능하다면 변수 선언은 루프 초기화 부분, 루프 이전에 행하는 것이 좋다.
4. Loop Update (루프 갱신)
- 카운터 값들을 갱신한다.
- 카운터 값들을 증감시키는 구문외에 어떤 Expression(표현식)도 루프 갱신문으로 표현할 수 있다.
Range-Based for Loop
- C++11에서 새롭게 추가된 for Loop 형태이다.
- 즉, 배열의 범위 내에서 모든 원소에 대한 연산을 수행하고자 할 때 더욱 간편한 Notation을 제공하는 기능이다.
Ex. 범위 기반 for 루프의 일반형
for (dataType Parameter : arrayName) {
Loop Body
}
Ex. 범위 기반 for 루프의 사용 예시
double prices[5] = {4.99, 10.99, 6.87, 7.99, 8.49};
for (double x : prices )
cout << x << endl; // 모든 원소를 출력
for (double &x : prices)
x = x * 0.80; // 모든 원소에 대한 연산