C 언어는 프로그래밍 초보자와 숙련자 모두에게 필수적인 언어로, 흐름 제어 구문을 정확히 이해하는 것이 중요합니다. break
와 continue
는 반복문에서 실행 흐름을 제어하는 강력한 도구입니다. 이 기사는 이 두 키워드의 개념, 사용법, 그리고 다양한 예제를 통해 이해를 돕고, 효율적으로 활용하는 방법을 제시합니다.
break와 continue란 무엇인가
break
와 continue
는 C 언어에서 반복문과 switch 문에서 사용되는 키워드로, 실행 흐름을 제어하는 역할을 합니다.
break의 개념
break
는 현재 실행 중인 반복문이나 switch 문을 즉시 종료하고, 다음 코드 블록으로 실행을 이동시킵니다. 반복문에서는 남아 있는 반복 주기를 무시하고 빠져나올 때 유용합니다.
continue의 개념
continue
는 현재 반복 주기를 중단하고, 반복문의 조건 확인 단계로 실행을 이동시킵니다. 반복문의 다음 주기로 바로 넘어가기 위해 사용됩니다.
주요 차이점
break
: 반복문 전체를 종료합니다.continue
: 반복문 내에서 현재 주기만 건너뜁니다.
이러한 특성은 특정 조건에서 실행 흐름을 효율적으로 제어하는 데 도움을 줍니다.
break의 기본 사용법
break
는 반복문이나 switch 문에서 특정 조건을 만족할 때 실행을 중단하기 위해 사용됩니다. 이는 코드 흐름을 빠르게 종료하고 다음 단계로 넘어가도록 설계되었습니다.
break의 문법
break
는 단독으로 사용되며, 다음과 같은 문법을 따릅니다:
break;
기본 예제
다음은 for
반복문에서 break
를 사용하는 예제입니다:
#include <stdio.h>
int main() {
for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // i가 5일 때 반복문 종료
}
printf("i: %d\n", i);
}
return 0;
}
출력:
i: 0
i: 1
i: 2
i: 3
i: 4
주요 사용 사례
- 반복문 조기 종료: 특정 조건이 충족되면 반복문을 종료합니다.
- switch 문 내 사용: 각 case 블록이 실행 후 빠져나오도록 제어합니다.
switch 문에서의 사용
#include <stdio.h>
int main() {
int num = 2;
switch (num) {
case 1:
printf("Number is 1\n");
break; // case 1 종료
case 2:
printf("Number is 2\n");
break; // case 2 종료
default:
printf("Number is not 1 or 2\n");
}
return 0;
}
break
는 코드 흐름을 효율적으로 제어하여 불필요한 연산을 방지하고 성능을 개선하는 데 유용합니다.
continue의 기본 사용법
continue
는 반복문 내에서 특정 조건이 만족되었을 때 나머지 코드를 건너뛰고 다음 반복 주기로 실행을 이동시키는 역할을 합니다.
continue의 문법
continue
는 단독으로 사용되며, 문법은 다음과 같습니다:
continue;
기본 예제
다음은 for
반복문에서 continue
를 사용하는 예제입니다:
#include <stdio.h>
int main() {
for (int i = 0; i < 10; i++) {
if (i == 5) {
continue; // i가 5일 때 나머지 코드 건너뜀
}
printf("i: %d\n", i);
}
return 0;
}
출력:
i: 0
i: 1
i: 2
i: 3
i: 4
i: 6
i: 7
i: 8
i: 9
주요 사용 사례
- 특정 조건을 건너뛰기: 특정 값이나 상태를 건너뛰고 반복을 계속 진행합니다.
- 중첩된 조건문 단순화: 조건문을 줄이고 코드 가독성을 높이는 데 활용됩니다.
while 문에서의 사용
#include <stdio.h>
int main() {
int i = 0;
while (i < 10) {
i++;
if (i % 2 == 0) {
continue; // 짝수는 출력하지 않음
}
printf("i: %d\n", i);
}
return 0;
}
출력:
i: 1
i: 3
i: 5
i: 7
i: 9
continue
는 특정 상황을 건너뛰고 다음 반복 주기로 빠르게 이동할 수 있도록 해 반복문을 효율적으로 제어할 수 있게 합니다.
반복문에서 break의 역할
break
는 반복문에서 특정 조건을 만족할 때 즉시 반복문을 종료하고 다음 코드로 흐름을 이동시키는 데 사용됩니다. 이는 실행 시간을 단축하고 불필요한 연산을 피할 수 있는 강력한 도구입니다.
기본 역할
break
는 반복문의 흐름을 강제로 종료하며, 다음과 같은 상황에서 주로 사용됩니다:
- 특정 조건을 만족하면 반복문을 끝냄.
- 무한 루프를 제어하여 프로그램이 멈추는 것을 방지.
예제: 조건부 종료
#include <stdio.h>
int main() {
for (int i = 0; i < 10; i++) {
if (i == 7) {
break; // i가 7일 때 반복문 종료
}
printf("i: %d\n", i);
}
return 0;
}
출력:
i: 0
i: 1
i: 2
i: 3
i: 4
i: 5
i: 6
무한 루프 제어
다음은 while
반복문에서 break
를 사용해 무한 루프를 종료하는 예제입니다:
#include <stdio.h>
int main() {
int count = 0;
while (1) { // 무한 루프
printf("count: %d\n", count);
count++;
if (count == 5) {
break; // count가 5이면 루프 종료
}
}
return 0;
}
출력:
count: 0
count: 1
count: 2
count: 3
count: 4
중첩된 반복문에서의 사용
break
는 내부 반복문에서만 영향을 미치며, 외부 반복문은 계속 실행됩니다:
#include <stdio.h>
int main() {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 5; j++) {
if (j == 3) {
break; // 내부 루프 종료
}
printf("i: %d, j: %d\n", i, j);
}
}
return 0;
}
출력:
i: 0, j: 0
i: 0, j: 1
i: 0, j: 2
i: 1, j: 0
i: 1, j: 1
i: 1, j: 2
i: 2, j: 0
i: 2, j: 1
i: 2, j: 2
break
는 반복문의 실행 흐름을 빠르게 제어하고, 특정 조건에서 반복문을 효율적으로 종료하는 데 유용합니다.
반복문에서 continue의 역할
continue
는 반복문 내에서 특정 조건을 만족했을 때 나머지 코드를 건너뛰고, 즉시 다음 반복 주기로 이동하도록 합니다. 이는 불필요한 연산을 피하고 반복문을 더 간결하게 만드는 데 유용합니다.
기본 역할
continue
는 현재 실행 중인 반복 주기의 남은 부분을 건너뛰고, 반복문 조건 확인 단계로 돌아갑니다. 이는 다음과 같은 상황에서 유용합니다:
- 특정 조건을 건너뛰고 반복을 계속 진행.
- 중복 조건문을 제거하고 코드 가독성을 향상.
예제: 특정 조건 건너뛰기
#include <stdio.h>
int main() {
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue; // 짝수는 건너뜀
}
printf("i: %d\n", i);
}
return 0;
}
출력:
i: 1
i: 3
i: 5
i: 7
i: 9
중첩된 반복문에서의 사용
continue
는 현재 반복문에만 영향을 미치며, 외부 반복문은 계속 실행됩니다:
#include <stdio.h>
int main() {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 5; j++) {
if (j == 2) {
continue; // j가 2일 때 다음 반복으로 이동
}
printf("i: %d, j: %d\n", i, j);
}
}
return 0;
}
출력:
i: 0, j: 0
i: 0, j: 1
i: 0, j: 3
i: 0, j: 4
i: 1, j: 0
i: 1, j: 1
i: 1, j: 3
i: 1, j: 4
i: 2, j: 0
i: 2, j: 1
i: 2, j: 3
i: 2, j: 4
무한 루프에서의 사용
continue
는 무한 루프에서도 특정 조건을 건너뛰는 데 사용됩니다:
#include <stdio.h>
int main() {
int count = 0;
while (1) {
count++;
if (count % 3 == 0) {
continue; // 3의 배수는 출력하지 않음
}
if (count > 10) {
break; // count가 10을 초과하면 종료
}
printf("count: %d\n", count);
}
return 0;
}
출력:
count: 1
count: 2
count: 4
count: 5
count: 7
count: 8
count: 10
continue
는 반복문 흐름을 유연하게 제어하고, 특정 상황을 건너뛰어 효율적인 코드 작성을 가능하게 합니다.
중첩된 반복문과 break
중첩된 반복문에서 break
는 내부 반복문을 종료하는 데 사용됩니다. 그러나 기본적으로 외부 반복문에는 영향을 미치지 않으므로 복잡한 흐름 제어를 구현하려면 주의가 필요합니다.
기본 동작
내부 반복문에서 break
를 호출하면 해당 반복문만 종료되고 외부 반복문은 계속 실행됩니다.
예제: 내부 반복문 종료
다음은 중첩된 반복문에서 break
를 사용하는 예제입니다:
#include <stdio.h>
int main() {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 5; j++) {
if (j == 3) {
break; // 내부 반복문 종료
}
printf("i: %d, j: %d\n", i, j);
}
}
return 0;
}
출력:
i: 0, j: 0
i: 0, j: 1
i: 0, j: 2
i: 1, j: 0
i: 1, j: 1
i: 1, j: 2
i: 2, j: 0
i: 2, j: 1
i: 2, j: 2
외부 반복문 종료
외부 반복문까지 종료하려면 플래그 변수나 goto
문을 사용할 수 있습니다.
플래그 변수를 활용한 방법
#include <stdio.h>
int main() {
int stop = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 5; j++) {
if (j == 3) {
stop = 1; // 외부 반복문 종료 신호 설정
break;
}
printf("i: %d, j: %d\n", i, j);
}
if (stop) {
break; // 외부 반복문 종료
}
}
return 0;
}
출력:
i: 0, j: 0
i: 0, j: 1
i: 0, j: 2
goto를 활용한 방법
#include <stdio.h>
int main() {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 5; j++) {
if (j == 3) {
goto end; // 반복문 종료
}
printf("i: %d, j: %d\n", i, j);
}
}
end:
return 0;
}
출력:
i: 0, j: 0
i: 0, j: 1
i: 0, j: 2
주의점
- 가독성:
goto
를 과도하게 사용하면 코드의 흐름을 이해하기 어려워질 수 있으므로 신중하게 사용해야 합니다. - 중첩 깊이 관리: 중첩된 반복문의 깊이가 깊어질수록 코드가 복잡해질 수 있으므로 적절한 설계가 필요합니다.
중첩된 반복문에서 break
는 내부 반복문 종료, 외부 반복문 종료 등 다양한 활용 방법이 있으며, 상황에 맞게 올바르게 사용하는 것이 중요합니다.
응용 예제: break와 continue의 조합
break
와 continue
를 조합하여 반복문의 흐름을 정교하게 제어할 수 있습니다. 이러한 조합은 복잡한 조건 처리나 특정 작업을 건너뛰고 반복을 중단해야 하는 상황에서 유용합니다.
예제: 특정 조건에서 반복 종료 및 건너뛰기
다음 예제에서는 break
와 continue
를 함께 사용하여 특정 조건에서 반복을 중단하거나 건너뜁니다:
#include <stdio.h>
int main() {
for (int i = 0; i < 10; i++) {
if (i == 3) {
continue; // i가 3일 때 나머지 코드 건너뜀
}
if (i == 7) {
break; // i가 7일 때 반복문 종료
}
printf("i: %d\n", i);
}
return 0;
}
출력:
i: 0
i: 1
i: 2
i: 4
i: 5
i: 6
중첩된 반복문에서의 사용
break
와 continue
를 조합하여 내부와 외부 반복문을 조건에 따라 제어할 수 있습니다.
#include <stdio.h>
int main() {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 5; j++) {
if (j == 2) {
continue; // j가 2일 때 나머지 코드 건너뜀
}
if (j == 4) {
break; // j가 4일 때 내부 반복문 종료
}
printf("i: %d, j: %d\n", i, j);
}
}
return 0;
}
출력:
i: 0, j: 0
i: 0, j: 1
i: 0, j: 3
i: 1, j: 0
i: 1, j: 1
i: 1, j: 3
i: 2, j: 0
i: 2, j: 1
i: 2, j: 3
실제 응용: 데이터 필터링
break
와 continue
를 조합해 데이터 필터링을 구현할 수 있습니다. 예를 들어, 배열에서 특정 값만 출력하다가 조건을 만족하면 중단합니다:
#include <stdio.h>
int main() {
int data[] = {1, 2, 3, 4, 5, 6, 7, 8};
int size = sizeof(data) / sizeof(data[0]);
for (int i = 0; i < size; i++) {
if (data[i] % 2 == 0) {
continue; // 짝수는 건너뜀
}
if (data[i] > 5) {
break; // 값이 5보다 크면 종료
}
printf("data[%d]: %d\n", i, data[i]);
}
return 0;
}
출력:
data[0]: 1
data[2]: 3
data[4]: 5
활용 팁
- 복잡한 조건을 간결하게 표현하기 위해
break
와continue
를 적절히 조합합니다. - 코드 가독성을 유지하기 위해 조건문을 명확히 작성합니다.
break
와 continue
의 조합은 반복문의 흐름을 세밀하게 조정하여 효율적인 코드 작성을 가능하게 합니다.
실수와 주의점
break
와 continue
는 반복문의 흐름을 제어하는 데 유용하지만, 잘못 사용하면 의도하지 않은 동작을 초래하거나 코드 가독성을 떨어뜨릴 수 있습니다. 이러한 문제를 방지하려면 주의해야 할 몇 가지 주요 사항이 있습니다.
반복문이 종료되지 않는 경우
break
를 사용하는 조건이 제대로 설정되지 않으면 반복문이 종료되지 않을 수 있습니다.
#include <stdio.h>
int main() {
int i = 0;
while (1) {
if (i == 5) {
break; // i가 5일 때 종료
}
printf("i: %d\n", i);
// i 값을 증가시키지 않으면 무한 루프 발생
}
return 0;
}
수정: 조건 안에서 i
를 증가시켜 무한 루프를 방지해야 합니다.
continue로 인해 코드가 건너뛰어지는 경우
continue
를 사용할 때 반복문의 나머지 코드가 실행되지 않으므로, 중요한 로직이 누락될 수 있습니다.
#include <stdio.h>
int main() {
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue; // 짝수를 건너뜀
}
printf("i: %d\n", i);
}
// 여기서 중요한 로직이 누락될 가능성
return 0;
}
해결 방법: continue
를 사용할 필요가 없는 경우 조건문을 사용해 코드 흐름을 관리합니다.
중첩된 반복문에서 break와 continue의 혼란
중첩된 반복문에서 break
와 continue
는 내부 반복문에만 영향을 미칩니다. 외부 반복문까지 종료하거나 건너뛰고 싶다면 추가적인 제어가 필요합니다.
#include <stdio.h>
int main() {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 5; j++) {
if (j == 2) {
break; // 내부 반복문 종료
}
printf("i: %d, j: %d\n", i, j);
}
}
return 0;
}
출력:
i: 0, j: 0
i: 0, j: 1
i: 1, j: 0
i: 1, j: 1
i: 2, j: 0
i: 2, j: 1
해결 방법: 외부 반복문 종료가 필요한 경우, 플래그 변수나 goto
를 사용하여 명확히 제어합니다.
가독성 저하
break
와 continue
를 과도하게 사용하면 코드가 복잡하고 이해하기 어려워질 수 있습니다.
해결 방법:
- 명확한 주석 추가.
- 필요 이상으로
break
와continue
를 사용하지 않음. - 논리를 단순화하거나 별도의 함수로 분리.
정리
break
는 반복문을 완전히 종료하므로, 조건이 정확하지 않으면 무한 루프나 논리적 오류가 발생할 수 있습니다.continue
는 남은 코드를 건너뛰기 때문에 중요한 로직이 누락될 수 있으므로 신중히 사용해야 합니다.- 코드 가독성을 유지하고 의도한 동작을 정확히 구현하려면 적절한 설계가 필요합니다.
요약
본 기사에서는 C 언어의 흐름 제어 구문인 break
와 continue
의 기본 개념, 사용법, 그리고 실용적인 응용 방법을 다루었습니다.
break
는 반복문을 조기 종료하여 실행 시간을 절약하며, 주로 특정 조건에서 반복을 중단하는 데 사용됩니다.continue
는 현재 반복 주기를 건너뛰고 다음 주기로 이동하여 특정 조건에서의 연산을 회피할 수 있습니다.
break
와 continue
를 효과적으로 사용하면 반복문을 보다 간결하고 효율적으로 작성할 수 있지만, 잘못 사용하면 코드의 가독성과 유지보수성을 저하시킬 수 있습니다. 이 두 키워드를 적절히 활용해 실행 흐름을 제어하는 능력을 키우는 것이 중요합니다.