이건 또 무슨 반복문일까
- while문을 사용해 봤다면 알 법한 문제이지만, while은 분명 조건식을 기반으로 제어할 수 있지만, 지정 횟수만큼 반복하기 위해선 추가적인 변수가 필요하다는 단점이 있었다.
for
문은 이 경우 요긴하게 사용할 수 있는 문법이며, for문 자체적으로 내부에서 사용 될 변수를 선언할 수 있기 때문에 자료의 순회 등 요긴하게 사용될 수 있다. 먼저 아래는 while문을 사용해 지정 횟수만큼 방복하는 코드이다.
int main()
{
int count = 0; // 반복문을 끝내기 위해 필요한 카운팅용 변수
int repeat = 20;
while (count < repeat)
{
std::cout << "반복문 실행" << std::endl;
++count;
}
}
- 분명 동작은 하지만 while만을 위해서 존재하기엔 애매한 변수인 것이 맞다. 이제부터 for문을 어떻게 사용할 수 있는지 살펴보며, while과 차이점을 숙지하고 각 문법이 어떤 상황에 사용하면 좋을 지 생각해보자.
어떻게 사용할까
- for문은 처음 접하는 사용자의 입장에서는 다소 난해한 문법으로 다가올 수 있다. 그도 그럴 것이 조건문, while 반복문과는 달리 선언하는 과정에서 (처음 볼 때는)복잡한 수식이 들어가기 때문이다. 다만 어디까지나 처음 볼 때의 기준이고, 익숙해지면 자신도 모르게 for문을 사용하고 있는 것을 발견할 수 있을것이다.
핵심적인 요소는 for
(초기값 설정
; 조건식
; 증감식
) 으로 이뤄진다. 내부적으로 반복문 제어에 사용 될 데이터를 초기값 설정
에서 선언하고, 조건식
에 따라 종료해야 할 지 판단하며, 증감식
을 통해 데이터를 변화시킨다. 바로 코드를 한번 살펴보자.
int main()
{
int repeat = 10;
// 초기값을 0으로 초기화
// 선언된 변수의 데이터가 'repeat'변수보다 작아야 실행된다.
// 증감식을 사용해 데이터에 1씩 더한다.
for (int i = 0; i < repeat; ++i)
{
std::cout << i << "번째 출력" << std::endl;
}
}
- 결과 :
- 심플하고 정확하게 10번 반복 후 종료되었다. 위 코드가 동작한 순서를 나열하면
- for문이 실행되며 내부에
int
타입의 변수가 선언되고, 데이터는 0으로 지정되었다
- 조건식의 결과가 true라면(for문 내부의 변수가 repeat 변수의 값보다 작다면) 내부의 로직을 수행한다. false라면 종료한다.
- 내부 로직 수행 후 증감식을 적용(for문 내부의 변수에 1을 더한다)
- 2, 3번을 반복한다
- 위와 같은 과정이 반복되었다. 그렇기 때문에 ‘0번째 출력’부터 ‘9번째 출력’까지 정상적으로 출력이 된 것이다. 위에서 언급했듯이 처음 볼 때 복잡해 보이는 것 뿐, while문 제어를 위해 필요했던 추가적인 변수와 증감식을 선언과 동시에 함께 선언한 것만 다를 뿐 내부적으로 동작하는 과정은 아주 심플하다.
continue, break
for
도 while과 마찬가지로 반복문이기 때문에 continue
와 break
키워드를 통해 내부에서 제어할 수도 있다. while 포스팅에서와 마찬가지로 홀수만 출력하는 코드를 구성해 보겠다. 추가적으로 for문의 조건식이 만족이 다 되지 않았더라도 break를 통해서 반복문을 종료해 보겠다.
int main()
{
for (int i = 0; i < 100; ++i)
{
// 'i % 2'가 0이라면 (i가 짝수라면)
if (i % 2 == 0)
{
// 이번 루틴은 스킵
continue;
}
// i가 11 이상이라면
if (i >= 11)
{
// 반복문 중지
break;
}
std::cout << i << std::endl;
}
}
또 다른 사용 방법은 없는가
- 위에서 작성된 예시 코드는 for문을 선언하며 내부적으로 사용될 변수를 같이 선언했다. 하지만 이런 것도 가능하다.
int main()
{
int num = 5;
for (num; num < 10; num++)
{
// 이게 됩니다
}
std::cout << num;
}
- 결과 :
- …이런것도 된다. for문 자체적으로 변수를 선언하지 않고 외부에서 선언된 변수를 사용하고, 반복문 종료에는 변수 원본 데이터에 증감식이 적용되어 있는 것까지 확인 가능하다. 이 외에도 for문에서 사용되는 변수는
int
타입이 아니어도 되므로, 여러가지 테스트를 병행해보기 바란다.
주의할 점은 없는가
- 당연히 있다. for문 자체가 (초심자 입장에서는)가독성이 좋은 문법은 절대로 아니다, 때문에 아래와 같은 실수도 종종 하게 될것이다.
int main()
{
for (int i = 100; i <= 100; --i)
{
// i가 100 이하라면 로직 실행 및 반복.
// 초기값은 100이며 증감식은 1씩 뺀다.
// 즉, (컴퓨터가 살아있는 한)영원히 실행된다.
}
}
- 때문에 for문을 사용할댄 초기값과 증감식, 그리고 조건식이 어떻게 설정되어 있는지 확인하고, 내부적으로 어떻게 구동될 지 미리 예측해보는 습관이 들면 좋다.
이 외에도
- while문 포스팅에서와 마찬가지로 반복문은 분명 편리한 프로그래밍 문법이지만, 잘 못 사용하거나 필요 이상으로 사용하게 될 경우 프로그램의 성능에 큰 영향을 끼칠 수 있는 요소이다. 따라서 반복문이 꼭 사용되어야 하는지, 그리고 이상하리만큼 반복문의 단계가 깊어지지는 않는 지 반드시 고려해보길 바란다.
댓글 남기기