이번 시간에는 이어서 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번째 손님부터는 입장할 수 없습니다.
🔶 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 == b와 c == 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, || 같은 조건 흐름은
겉보기에는 간단하지만,
실전에서는 코드의 뇌와 혈관을 형성하는 진짜 핵심 기능들이야.
'C++ > 입문' 카테고리의 다른 글
[#10] switch문과 숫자 맞추기 게임 만들기 (4) | 2025.06.12 |
---|---|
[#9] rand, srand, #include <time.h>로 무작위 숫자 뽑기 (1) | 2025.06.11 |
[#7] 조건문(if, else if, else)으로 '숫자 맞추기 게임' 만들기 (2) | 2025.06.09 |
[#6] 반복문을 이용해서 피라미드 게임 만들기 (3) | 2025.06.02 |
[#5] 중첩(이중, 삼중) 반복문과 별 쌓기 (4) | 2025.05.30 |