중첩 for 루프(nested for loop)란 하나의 for문 본문 안에 또 다른 for문이 포함된 구조를 말합니다. 외부 루프가 한 번 실행될 때마다 내부 루프가 전체적으로 한 사이클씩 돌게 되며, 전체 반복 횟수는 외부 루프의 반복 횟수 × 내부 루프의 반복 횟수로 계산됩니다.
이러한 구조는 구구단처럼 행과 열로 이루어진 데이터를 처리하거나 2차원 배열을 순회할 때 특히 유용하게 활용됩니다.
중첩 for 루프 예제
다음은 C 언어로 작성한 중첩 for 루프 프로그램입니다.
#include<stdio.h>
main( ){
int i, j;
for (i = 1; i <= 2; i++) {
for (j = 1; j <= 2; j++) {
printf("%d", i * j);
}
}
}
실행 결과
1224
실행 과정을 단계별로 살펴보면 다음과 같습니다.
- i=1일 때: j=1 → 1×1 = 1 출력, j=2 → 1×2 = 2 출력
- i=2일 때: j=1 → 2×1 = 2 출력, j=2 → 2×2 = 4 출력
외부 루프 2회 × 내부 루프 2회 = 총 4번의 반복이 수행되는 것을 확인할 수 있습니다.
C 언어에는 루프와 함께 사용되는 관련 문장으로 break, continue, goto가 있습니다.
break문
- 루프를 강제로 종료하거나 블록에서 빠져나올 때 사용하는 키워드입니다.
- break가 실행되면 제어는 루프(또는 블록) 바로 다음 문장으로 이동합니다.
- for, while, do-while, switch문과 함께 사용할 수 있습니다.
- 중첩 루프에서 break를 사용하면 가장 안쪽 루프만 종료되며, 외부 루프는 계속 실행됩니다.
break문 예제
#include<stdio.h>
void main( ){
int i;
for (i = 1; i <= 5; i++) {
printf("%d", i);
if (i == 3)
break;
}
}
실행 결과
123
i가 3이 되는 순간 break문이 실행되어 루프가 즉시 종료되므로, 4와 5는 출력되지 않습니다.
continue문
- 현재 반복을 건너뛰고 루프의 다음 반복을 계속 진행하는 키워드입니다.
- continue문 이후에 작성된 문장들은 해당 반복에서 실행되지 않고 건너뛰어집니다.
- for, while, do-while문과 함께 사용됩니다.
continue문 예제
#include<stdio.h>
void main( ){
int i;
for (i = 1; i <= 5; i++) {
if (i == 2)
continue;
printf("%d", i);
}
}
실행 결과
1345
i가 2일 때 continue문이 실행되어 printf문이 건너뛰어지므로, 2를 제외한 나머지 숫자만 출력됩니다.
goto문
goto문은 프로그램의 정상적인 실행 흐름을 벗어나 제어를 프로그램의 다른 부분으로 직접 이동시키는 문장입니다. 지정한 레이블(label) 위치로 무조건 분기(unconditional jump)를 수행합니다.
다만 goto문은 코드의 흐름을 복잡하게 만들고 가독성을 떨어뜨릴 수 있으므로, 현대적인 C 프로그래밍에서는 사용을 최소화하는 것이 권장됩니다.
goto문 예제
#include<stdio.h>
void main( ){
printf("Hello");
goto l1;
printf("How are");
l1: printf("you");
}
실행 결과
Helloyou
"Hello"가 출력된 후 goto문에 의해 l1 레이블로 제어가 이동하므로, "How are"는 건너뛰어지고 "you"만 출력됩니다.
정리
중첩 for 루프는 반복 작업을 계층적으로 처리할 수 있는 강력한 도구이며, break와 continue를 적절히 활용하면 루프의 흐름을 세밀하게 제어할 수 있습니다. goto문은 코드 구조를 해칠 수 있으므로 특수한 경우에만 신중하게 사용하는 것이 좋습니다.