[#8] break, continue, || 에 대해서 알아보자

이번 시간에는 이어서 break, continue, ||(shift+\)문과 간단하게 !까지 더해서 알아보겠습니다.

 

지금까지 C++을 배우면서 ‘반복’이나 ‘조건’은 어느정도 익숙해 졌을 겁니다.
이제 여기에다 조금 더 세밀하게 흐름을 제어할 수 있는 도구들을 추가해 볼 건데, 그게 바로 위의 저 네가지입니다.

  • 반복문을 멈추는 break
  • 특정 조건에서만 건너뛰는 continue
  • 조건 중 하나라도 참이면 실행되는 ||(OR 연산자)
  • 조건을 부정하는 !(NOT 연산자)

 


 

 

🔶 break

 

먼저 break부터 살펴보겠습니다.
break는 반복문 안에서 사용되며, 지금 반복을 즉시 끝내고 밖으로 나가는 명령어입니다.

 

 

✨ 예제 : 식당에서 손님 받기

 

먼저 코드를 하나 작성해볼텐데, for문과 if문을 활용해 아래와 같이 조건을 걸어줄 겁니다.

for (int i = 1; i <= 10; i++)
{
    if (i >= 6)
    {
        printf("6번째 손님부터는 입장할 수 없습니다.\n");
        break; // 반복문을 종료합니다.
    }
    printf("%d번째 손님이 입장했습니다.\n", i);
}
  • for문을 이용해 i가 10보다 크거나 같을때까지 i+1이 되게 설정해 줬습니다.
  • 조건문 if에는 i >= 6을 놨죠. 이는 만약 i가 6보다 같거나 높다면을 뜻합니다.
  • i >= 6 조건이 성립됐을 때는 "6번째 손님부터는 입장할 수 없습니다."가 출력되게 됩니다.
  • 또한 break문을 통해 i >= 6 조건이 성립됐을 때, 해당 반복문을 빠져나가게 됩니다.
  • i >= 6 조건이 성립되기 전까지는 "%d번째 손님이 입장했습니다."가 출력되게 됩니다.

코드를 보면 printf 다음에 break가 들어간 것을 볼 수 있을텐데,

저렇게 중간에 break문을 넣으면 해당 반복문을 빠져나가게 됩니다.

실행 결과는 아래처럼 나오겠죠?

1번째 손님이 입장했습니다.
2번째 손님이 입장했습니다.
3번째 손님이 입장했습니다.
4번째 손님이 입장했습니다.
5번째 손님이 입장했습니다.
6번째 손님부터는 입장할 수 없습니다.
 
만약 break 문이 들어가지 않았다면, 7~10번째 손님도 6번째 손님처럼 하나하나 설명을 해 줬어야 했을 겁니다.
하지만 break가 제동을 걸어주는 덕에 6번째 손님까지만 받고 손님을 그만 받을 수 있었죠.
혹시 break가 없을 때의 결과가 궁금하신 분들은 break;를 빼고 다시 실행해보시면 이해가 잘 될겁니다.

 


 

🔶 continue

 

다음은 continue입니다. 이건 break처럼 완전히 멈추는 게 아니라,
지금 이 한 번만 건너뛰고 다음 반복으로 넘어가는 명령어입니다.

이 '한 번만 건너뛴다'라는 개념을 잘 기억하고 있어야 합니다.

 

 

✨ 예제 : 식당 무료식사 이벤트

 

위와 마찬가지로, for문과 if문을 활용해 아래와 같이 조건을 걸어줄 겁니다.

for (int i = 1; i <= 20; i++)
{
    if (i >= 5 && i <= 15)
    {
        if (i == 14)
        {
            printf("%d번째 손님은 무료입니다.\n", i);
            continue; // 다음 반복으로 넘어감
        }
    }
    printf("%d번째 손님 입장\n", i);
}
  • for문을 이용해 i가 20보다 크거나 같을때까지 i+1이 되게 설정해 줬습니다.
  • 조건문 if에는 i >= 5 && i <= 15를 놨죠. 이는 만약 i가 5보다 크거나 같으면서 15보단 작거나 같다면을 뜻합니다.
  • 그 다음에는 i == 14를 넣어줬습니다. 이는 i가 14와 같을 때를 뜻합니다.
  • i == 14일때"%d번째 손님은 무료입니다."가 출력되게 됩니다.
  • 반복문이 14에 도달해서 위의 문구를 출력한 이후에는 continue로 인해 20번까지 다시 손님을 받게 됩니다.
  • 14번째 손님을 제외한 1~20번 손님은 모두 맨 아래의 printf문구인 "%d번째 손님 입장"이 출력되게 됩니다.

continue는 continue의 조건에 해당하는 것만 이벤트를 발생시키고 이후의 것들에는 영향을 끼치지 않습니다.

이후 나오는 것들도 모두 무시하고 반복문을 탈출해버리는 break랑은 성질이 좀 다른것이죠.

그러니 결과는 아래와 같이 나오게 됩니다.

...
13번째 손님 입장
14번째 손님은 무료입니다.
15번째 손님 입장
...

즉 1~13번 손님까진 받고, 14번 손님은 무료로 식사를 제공, 다시 15~20번 손님은 정상적으로 받는 구조가 탄생하게 되죠.

 


 

🔶 || (shift+\ 두 개)

 

이번엔 조건문에서 자주 쓰이는 논리 연산자|| 입니다.
||는 ‘또는’이라는 뜻으로, 조건 중 하나라도 참이면 전체가 참이 됩니다.

 

 

✨ 예제 : ||써서 숫자 비교하기

 

a~d까지 변수를 만들고 그 변수에 각각 숫자를 대입해줬습니다.

a와 b는 값이 같고, c와 d는 값이 서로 다르죠.

int a = 3;
int b = 3;
int c = 6;
int d = 9;

if (a == b || c == d)
{
    printf("a와 b가 같거나 c와 d가 같습니다.\n");
}
  • 변수 a와 b는 값이 동일합니다.
  • 변수 c와 d는 값이 다릅니다.
  • if문을 이용해 a == bc == d를 넣고 중간에 || 연산자를 넣었습니다. 해석하면 a와 b가 같거나 c와 d가 같다면이 됩니다.
  • if문이 성립된다면 printf로 "a와 b가 같거나 c와 d가 같습니다."가 출력됩니다.

위에서는 ||연산자로 인해 if문이 '참'이 되므로, printf가 정상적으로 출력되게 됩니다.

출력되는 이유는 ||는 조건 중 하나라도 참이면 전체가 참이 되기 때문입니다.

 


 

🔶 !

 

!는 NOT을 뜻하는 부정 연산자입니다. 즉, 조건의 결과를 반대로 뒤집는 역할을 합니다.

 

예를 들어 !(a < b)는
→ “a가 b보다 작지 않다”가 됩니다.
→ 즉, "a는 b보다 크거나 같다"는 소리가 되죠.

 

 

✨ 예제 : !써서 숫자 비교하기

 

이번엔 ||말고 !를 써서 숫자를 비교해보겠습니다. ||예제와는 다르게 a~d값이 모두 다릅니다.

int a = 1;
int b = 2;
int c = 3;
int d = 4;


if (!(a < b))
{
    printf("a와 b는 서로 다릅니다.\n");
}
else if (!(c == d))
{
    printf("c와 d는 서로 다릅니다.\n");
}
  • 변수 a~d는 모두 값이 다릅니다. (a = 1, b = 2, c = 3, d = 4)
  • if문을 이용해 a < b를 넣고 ! 연산자를 썼습니다. 이를 해석하면 b가 a보다 크지 않을 때가 됩니다. 원래대로 해석하면 b가 a보다 클 때가 되곘지만 !연산자로 인해 결과가 뒤집힌 것이죠.
  • 결국 b는 a보다 크므로 첫번째 printf 문구는 조건이 성립되지 않아 출력되지 않습니다.
  • else if문에는 c == d를 넣고 ! 연산자를 썼습니다. 이를 해석하면 c와 d가 같지 않다면이 됩니다. 원래대로라면 c와 d가 같다면이 되겠지만 !연산자로 인해 결과가 뒤집힌 것이죠.
  • 결국 c와 d는 다르므로 두번째 printf 문구는 조건이 성립되며 출력됩니다.

 

 

🔹! 연산자는 왜 쓸까?

 

그렇다면 ! 연산자는 대체 왜 쓸까요?? 그냥 조건을 반대로 적으면 되는걸텐데 굳이 !를 써서 한번 더 비트니 더 헷갈립니다.

사실 !연산자는 "어떤 조건이 거짓일 때"를 표현하고 싶을 때 이를 가장 간결하기 쓰기 위해서 존재합니다.

 

말로만 들으면 감이 잘 안잡히니 바로 예시로 알아보겠습니다.

 

 

🔍 예시 1: 부정 조건 간단히 쓰기

 

✘ 안 좋은 방식:

if (a == false)

 

✔ 좋은 방식:

if (!a)

 

→ 예시로 보니 왜 !를 쓰는지 확 들어오긴 합니다. 확실히 위보단 아래가 훨씬 직관적입니다.

그래도 더 확실히 이해하기 위해 다른 예시를 보겠습니다.

 

 

🔍 예시 2: 함수의 반대 조건 체크

if (!isLoggedIn())
{
    printf("로그인이 필요합니다.\n");
}

→ 위는 로그인을 할 때를 가정한 상황입니다. isLoggedIn()이 거짓(false)일 때 메시지를 출력하게 했더니 코드가 굉장히 간결해졌습니다.

 

이렇듯 !연산자는 "이 조건이 아니라면?"을 가장 간단하게 표현해주는 연산자입니다.

즉, 읽기 쉽고, 유지보수에도 강한 코드를 만들기 위해 자주 쓰이죠.

 


 

🔶 AI피드백

 

Q. 오늘은 break, continue, ||연산자, !연산자에 대해서 알아봤어. 네가지 기능들은 생각보다 꽤 직관적이여서 이해를 하는데는 큰 어려움이 없었지. 다만 이 내용들이 실제 개발 환경에서는 어떤경우에 어디에 쓰이는지 궁금해. 그리고 어떤 분야에 자주 쓰이는지도 알고싶어. 만약 모든 분야에 다 골고루 자주 쓰인다면 그렇다고 답해주면 돼.

 

A. 좋아, 정말 잘했어! 오늘 공부한 break, continue, ||, ! 네 가지는
단순한 문법 같지만, 실제 개발에선 "조건 흐름 제어의 무기"로 엄청 많이 쓰이는 것들이야.

 


✅ 이 네 가지 문법, 실제 개발에 어디에 쓰일까?

 

각각 실제 환경에서의 대표적인 쓰임새
어떤 분야에서 자주 등장하는지 함께 설명해줄게.

 

1. break

반복문/조건문을 즉시 종료시킬 때 사용

 

💡 주로 사용되는 곳:

  • 무한 루프에서 탈출 (예: while (1) 루프에서 종료 조건에 따라 탈출)
  • switch 문에서 case 간 중첩 방지
  • 검색 알고리즘: 조건에 맞는 값 찾고 더 이상 반복할 필요 없을 때 중단

🎮 쓰이는 분야:

  • 게임 개발: 플레이어가 특정 위치에 도달하면 루프 종료
  • AI 루프 제어: 탐색 도중 원하는 결과를 찾으면 바로 탈출
  • 임베디드 개발: 센서 값이 일정 조건을 넘으면 루프 종료 후 처리

 

2. continue

현재 반복을 건너뛰고 다음 반복으로 진행

 

💡 주로 사용되는 곳:

  • 예외 상황이나 조건 무시 처리
    (예: 음수는 계산 안 하고 넘어가고 싶은 경우)
  • 필터링 작업

 

🎮 쓰이는 분야:

  • 데이터 처리: 특정 조건을 만족하지 않으면 건너뛰기
  • 게임 루프에서 조건부 패스: 예를 들어 죽은 적은 건너뛰고 처리
  • UI 시스템: 무효한 버튼은 무시하고 나머지만 처리

 

3. || (OR 연산자)

두 조건 중 하나라도 참이면 전체가 참

 

💡 주로 사용되는 곳:

  • 여러 종료 조건 또는 입력 조건을 동시에 체크할 때
  • if (x == 'q' || x == 'Q') 처럼 다양한 입력 허용

 

🎮 쓰이는 분야:

  • 입력 이벤트 처리: 여러 키나 조건 중 하나라도 만족하면 처리
  • 조건부 분기: 다양한 상태 중 하나만 맞아도 작동하게 만들기
  • 웹 개발: 사용자 로그인 조건에서 이메일이든 아이디든 둘 중 하나 OK

 

4. ! (NOT 연산자)

조건을 부정할 때 사용

 

💡 주로 사용되는 곳:

  • if (!isAlive) → 살아 있지 않으면
  • if (!(x > 10)) → 10 이하일 때
  • 플래그 조건 뒤집기 (if (!valid) → 잘못된 상태일 때)

 

🎮 쓰이는 분야:

  • AI 조건문: 적이 보이지 않을 때 행동
  • 게임 엔진에서 부정 조건 필터링
  • 보안 로직: 로그인 실패 등

 

🎯 네가지 개념이 어느 분야에 가장 자주 쓰이냐고?

 

답은: “모든 분야에서 골고루 매우 자주 사용된다.” 

 

 

분야 사용 여부
게임 개발 ✅ 핵심 제어 흐름
웹/앱 개발 ✅ 입력 처리, 상태 검사
시스템 프로그래밍 ✅ 루프 제어, 상태 전환
인공지능/알고리즘 ✅ 조건 분기, 반복 중지
데이터 분석/필터링 ✅ continue/break 조건 처리
 

🧠 그리고 너처럼 느낀 대로:

if나 break, || 같은 조건 흐름은
겉보기에는 간단하지만,
실전에서는 코드의 뇌와 혈관을 형성하는 진짜 핵심 기능들이야.