32.2 중첩 루프 빠져 나오기
이번에는 중첩 루프와 goto에 대해서 알아보겠습니다. 다음은 변수 num1이 20이 되면 중첩 루프를 빠져나옵니다.
if_multiple_loop.c
#include <stdio.h> #include <stdbool.h> int main() { int num1 = 0; bool exitOuterLoop = false; // 바깥쪽 루프를 빠져나올지 결정하는 변수 for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { if (num1 == 20) // num1이 20이라면 { exitOuterLoop = true; // 바깥쪽 루프도 빠져나가겠음 break; // 안쪽 루프를 끝냄 } num1++; } if (exitOuterLoop == true) // 바깥쪽 루프도 빠져나오겠다고 결정했으면 break; // 바깥쪽 루프를 끝냄 } printf("%d\n", num1); // 20 return 0; }
실행 결과
20
break의 가장 큰 특징은 현재 루프만 끝낸다는 점입니다. 따라서 중첩 루프의 안쪽 루프에서 break를 사용하면 안쪽 루프만 끝낼 뿐 바깥쪽 루프는 계속 반복됩니다. 그러다 보니 여기서는 변수 exitOuterLoop를 사용해서 바깥쪽 루프도 끝내겠다고 결정을 해주고 있습니다.
이처럼 중첩 루프를 빠져 나오려면 추가적인 코드가 더 필요한데 goto를 사용하면 간단하게 빠져나올 수 있습니다.
goto_multiple_loop.c
#include <stdio.h> int main() { int num1 = 0; for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { if (num1 == 20) // num1이 20이라면 goto EXIT; // 레이블 EXIT로 즉시 이동 num1++; } } EXIT: // 레이블 EXIT printf("%d\n", num1); // 20 return 0; }
실행 결과
20
변수 num1이 20이 되면 goto를 사용하여 레이블 EXIT로 즉시 이동합니다. 따라서 안쪽과 바깥쪽 루프를 break로 끝낼 필요가 없습니다.
이처럼 goto는 다중 루프를 빠져나올 때 유용합니다. 여기서는 for 반복문을 예로 들었지만 while, do while로 된 중첩 루프도 빠져 나올 수 있습니다.