icon안동민 개발노트

break와 continue


break 문 개요

 break 문은 현재의 반복문이나 switch 문을 즉시 종료하고 그 다음 문장으로 제어를 이동시키는 제어 흐름 문장입니다. 주로 특정 조건이 만족되면 반복문을 빠져나오고 싶을 때 사용합니다.

break 문의 사용

 반복문에서의 break

#include <iostream>
 
int main() {
    for (int i = 1; i <= 10; i++) {
        if (i == 5) break;
        std::cout << i << " ";
    }
    std::cout << std::endl;
    return 0;
}
출력
1 2 3 4 

 이 예제에서 i가 5가 되면 break 문이 실행되어 for 루프가 즉시 종료됩니다.

 중첩 반복문에서의 break

#include <iostream>
 
int main() {
    for (int i = 1; i <= 3; i++) {
        for (int j = 1; j <= 3; j++) {
            if (i == 2 && j == 2) break;
            std::cout << i << "," << j << " ";
        }
        std::cout << std::endl;
    }
    return 0;
}
출력
1,1 1,2 1,3 
2,1 
3,1 3,2 3,3 

 이 예제에서 break는 가장 안쪽의 for 루프만 종료시킵니다.

 switch 문에서의 break

#include <iostream>
 
int main() {
    int choice = 2;
    switch (choice) {
        case 1:
            std::cout << "One";
            break;
        case 2:
            std::cout << "Two";
            break;
        default:
            std::cout << "Other";
    }
    std::cout << std::endl;
    return 0;
}
출력
Two

 switch 문에서 break는 각 case 후에 사용하여 다음 case로 실행이 이어지는 것을 방지합니다.

continue 문 개요

 continue 문은 현재의 반복을 즉시 종료하고 다음 반복으로 제어를 이동시키는 제어 흐름 문장입니다. 특정 조건에서 반복문의 나머지 부분을 건너뛰고 싶을 때 사용합니다.

continue 문의 사용

 for 반복문에서의 continue

#include <iostream>
 
int main() {
    for (int i = 1; i <= 5; i++) {
        if (i == 3) continue;
        std::cout << i << " ";
    }
    std::cout << std::endl;
    return 0;
}
출력
1 2 4 5

 이 예제에서 i가 3일 때 continue 문이 실행되어 그 반복을 건너뛰고 다음 반복으로 진행됩니다.

 while 반복문에서의 continue

#include <iostream>
 
int main() {
    int i = 0;
    while (i < 5) {
        i++;
        if (i == 3) continue;
        std::cout << i << " ";
    }
    std::cout << std::endl;
    return 0;
}
출력
1 2 4 5

 while 루프에서 continue를 사용할 때는 반복 조건 변수(여기서는 i)의 증가에 주의해야 합니다.

break와 continue의 차이점

  • break : 반복문을 완전히 종료하고 다음 문장으로 이동합니다.
  • continue : 현재 반복만 종료하고 다음 반복으로 진행합니다.

주의사항

  1. 과도한 사용은 코드의 가독성을 해칠 수 있습니다. 가능한 경우 조건문을 사용하여 로직을 명확히 표현하는 것이 좋습니다.
  2. 무한 루프에서 break를 사용할 때는 반드시 종료 조건이 만족될 수 있도록 해야 합니다.
  3. continue 사용 시 반복 조건 변수 업데이트에 주의해야 합니다. 특히 while 루프에서 주의가 필요합니다.
  4. 중첩된 반복문에서 break나 continue는 가장 안쪽의 반복문에만 영향을 미칩니다.

대안적 접근법

  1. 함수 사용 : 복잡한 로직을 함수로 분리하여 break나 continue 사용을 줄일 수 있습니다.
#include <iostream>
 
bool shouldProcess(int num) {
    return num % 2 == 0;
}
 
void processNumber(int num) {
    std::cout << num << " ";
}
 
int main() {
    for (int i = 1; i <= 10; i++) {
        if (!shouldProcess(i)) continue;
        processNumber(i);
    }
    std::cout << std::endl;
    return 0;
}
  1. 불리언 플래그 사용 : break 대신 플래그를 사용하여 루프를 제어할 수 있습니다.
#include <iostream>
 
int main() {
    bool found = false;
    for (int i = 1; i <= 100 && !found; i++) {
        if (i * i > 500) {
            std::cout << "First number whose square is > 500: " << i << std::endl;
            found = true;
        }
    }
    return 0;
}

연습 문제

  1. 사용자로부터 숫자를 입력받아 양수의 합만 계산하는 프로그램을 작성하세요. 음수가 입력되면 프로그램을 종료합니다.
  2. 2부터 100까지의 소수를 출력하는 프로그램을 작성하세요. break와 continue를 적절히 활용하세요.
  3. 문자열에서 모음(a, e, i, o, u)을 제외한 문자만 출력하는 프로그램을 작성하세요.
  4. 1부터 시작하여 3의 배수와 5의 배수를 출력하는 프로그램을 작성하세요. 단, 100을 초과하는 첫 번째 수에서 프로그램을 종료합니다.


참고 자료