C++ switch 문이란?
조건문은 프로그램의 흐름을 제어하고 특정 코드 블록이 언제 실행될지 지정하는, 모든 프로그래밍 언어에 공통으로 등장하는 핵심 요소입니다.
C++에서 가장 널리 쓰이는 조건문은 if 문과 if … else 문입니다. 여기에 더해 C++은 switch 문도 제공합니다. switch 문은 하나의 표현식을 여러 후보 case와 비교하여, 일치하는 case가 있으면 해당 코드 블록을 실행합니다. 동작 방식을 보면 수많은 if … else 문이 이어진 if 문과 유사하다고 할 수 있습니다.
이 글에서는 예제와 함께 C++에서 switch 문을 사용하는 방법을 살펴보고, break 키워드와 default 키워드를 switch 문과 함께 활용하는 법도 알아봅니다. 이 가이드를 끝까지 읽고 나면 C++ switch 문을 능숙하게 다룰 수 있을 것입니다.
C++ 조건문 복습
if, if … else 같은 조건문은 프로그램 안에서 의사결정을 내리는 역할을 합니다. 예를 들어, 사용자가 16세 이상인 경우나 오늘이 수요일인 경우에만 특정 코드 블록을 실행하도록 프로그램에 지시할 수 있습니다.
if 문과 if … else 문은 가장 일반적인 조건문 형태로, 조건이 참일 때 코드 블록을 실행하고 그렇지 않으면 아무 작업도 수행하지 않습니다. 다음은 C++ if 문의 간단한 예입니다:
int age = 15;
if (age > 16) {
cout << "This user is over the age of 16.";
}
이 코드는 변수 age가 16보다 큰지 평가합니다. 참이라면 콘솔에 해당 메시지를 출력하고, 거짓이라면 아무 일도 일어나지 않습니다. 이 예제에서 사용자의 나이는 15살이므로 age > 16은 거짓이 되고, 따라서 if 문에 연결된 코드는 실행되지 않습니다.
그런데 만약 여러 조건을 한꺼번에 평가해야 한다면 어떻게 해야 할까요?
바로 이럴 때 switch 문이 빛을 발합니다. 물론 if … else 문을 반복해서 여러 조건을 처리할 수도 있지만, 이런 방식은 비효율적일 뿐만 아니라 코드 가독성도 떨어뜨립니다. 그래서 개발자들은 하나의 표현식을 여러 case와 비교해야 할 때 switch 문을 자주 사용합니다.
C++ switch 문의 구문
switch 문은 'switch … case' 문이라고도 부르며, 하나의 표현식이 여러 case 중 하나와 같은지 검사할 수 있게 해줍니다. 표현식이 switch 블록 안의 특정 case와 일치하면(즉, 값이 같으면) 그 case에 연결된 코드가 실행됩니다.
switch 문에는 하나 이상의 case 문이 포함됩니다. 프로그램은 각 case 문을 통해 대상 표현식을 어떤 조건과 비교할지 선언합니다.
switch 문은 괄호로 감싼 평가 대상 표현식과, 중괄호로 묶인 하나 이상의 case 라벨을 받습니다. 전체적인 구문은 다음과 같습니다:
switch (expression) {
case firstCase:
// expression이 firstCase와 일치할 때 실행할 코드
break;
case secondCase:
// expression이 secondCase와 일치할 때 실행할 코드
break;
default:
// 어떤 case도 일치하지 않을 때 실행할 코드
}
위 switch 문의 실행 흐름을 단계별로 정리하면 다음과 같습니다:
- 프로그램이 expression을 평가합니다.
- expression을 firstCase와 비교합니다. 두 값이 일치하면 firstCase 블록의 코드를 실행한 뒤, break 키워드가 실행되어 switch 블록을 종료합니다.
- expression이 firstCase와 일치하지 않으면, 다음으로 secondCase와 비교합니다.
- expression이 secondCase와 일치하면 secondCase 블록의 코드를 실행하고, break 문이 switch 블록을 종료합니다.
- expression이 switch 블록의 어떤 case와도 일치하지 않으면, default case 문의 내용이 실행됩니다.
참고: break 키워드와 default 문에 대해서는 아래에서 자세히 다룹니다. break는 현재 switch 블록을 빠져나가라고 프로그램에 지시하는 키워드이며, default는 어떤 case도 표현식과 일치하지 않을 때 수행할 동작을 지정하는 키워드입니다.
switch 문에서 프로그램은 먼저 첫 번째 case를 평가합니다. 첫 번째 case가 참이 아니면, 조건이 충족되거나 모든 case를 확인할 때까지 이후 case들을 순서대로 평가합니다.
C++ switch 문 예제
예제를 단계별로 살펴보면서 switch 문이 실제로 어떻게 동작하는지 알아보겠습니다.
주말까지 며칠이 남았는지 알려주는 프로그램을 작성한다고 가정해 보겠습니다. 이 프로그램에서는 요일을 정수로 표현합니다. 예를 들어 월요일은 1, 화요일은 2, 수요일은 3처럼 말입니다.
프로그램은 현재 요일(정수 값)을 받아 여러 case와 비교합니다. 각 case는 현재 요일에 따라 주말까지 남은 일수를 알려주는 문장을 출력하도록 지시합니다.
이 작업을 수행하기 위한 코드는 다음과 같습니다:
#include <iostream>
using namespace std;
int main() {
int dayOfWeek = 3;
switch (dayOfWeek) {
case 1:
cout << "주말까지 5일 남았습니다!";
break;
case 2:
cout << "주말까지 4일 남았습니다!";
break;
case 3:
cout << "주말까지 3일 남았습니다!";
break;
case 4:
cout << "주말까지 2일 남았습니다!";
break;
case 5:
cout << "주말까지 하루 남았습니다!";
break;
}
}
이 코드를 실행하면 다음과 같은 결과가 출력됩니다:
주말까지 3일 남았습니다!
코드를 하나씩 분석해 보겠습니다. 먼저 현재 요일을 정수로 저장하는 변수 dayOfWeek를 선언합니다. 그다음 다섯 개의 case를 지정한 switch 문을 사용합니다.
프로그램은 먼저 dayOfWeek가 1과 같은지 검사합니다. 참이라면 콘솔에 "주말까지 5일 남았습니다!"라는 메시지를 출력한 후 switch 문을 빠져나갑니다.
dayOfWeek가 1이 아니라면 프로그램은 다음 case를 평가합니다. 이 과정은 어느 case가 참이 되어 break 문이 실행되고 switch 문이 종료될 때까지, 또는 모든 case를 평가할 때까지 계속됩니다.
이 예제에서는 요일이 3, 즉 수요일이라고 설정했습니다. 따라서 프로그램은 "주말까지 3일 남았습니다!"라는 메시지를 콘솔에 출력하고, switch 블록을 종료한 뒤 메인 프로그램의 나머지 부분을 계속 실행합니다.
C++ break 키워드
C++ switch 문에서는 위 예제처럼 각 case마다 일반적으로 break 키워드를 사용합니다. break 문이 실행되면 해당 블록의 코드 실행이 중단되고, 프로그램은 나머지 부분을 계속 진행합니다.
break 문이 switch 문과 함께 자주 사용되는 이유는, 남은 case들을 더 이상 평가하지 않도록 프로그램을 멈춰 주기 때문입니다.
앞선 예제에서 가져온, switch 문 안에서 break 키워드가 사용된 모습은 다음과 같습니다:
...
case 3:
cout << "주말까지 3일 남았습니다!";
break;
...
위 예제에서 dayOfWeek가 3이라면, 프로그램은 break 문을 실행해 더 이상 다른 case를 평가하지 않습니다. 당연한 결과입니다. dayOfWeek가 3이라면 4나 5와는 같을 수 없기 때문입니다. 4와 5는 switch 문에서 바로 다음에 오는 case들입니다.
dayOfWeek가 3이면 "주말까지 3일 남았습니다!"라는 메시지가 콘솔에 출력됩니다. 그다음 break 문이 프로그램에게 switch 블록을 건너뛰고 다음으로 진행하라고 지시하기 때문에 switch 문은 더 이상 실행되지 않습니다.
참고로 break를 생략하면 일치하는 case 이후의 코드가 연달아 실행되는 '폴스루(fall-through)' 현상이 발생합니다. 의도적으로 폴스루를 활용하는 경우도 있지만, 대부분의 경우 각 case 끝에 break를 붙여 원치 않는 실행을 방지하는 것이 좋습니다.
C++ default 키워드
C++에서 선택 사항인 default case 키워드는 어떤 case도 참으로 평가되지 않을 때 코드가 수행할 동작을 지정합니다.
앞선 예제의 코드는 평일만 처리합니다. 따라서 이미 주말이라면 프로그램은 아무 작업도 하지 않습니다. default 문을 사용하면 어떤 case도 일치하지 않을 때 수행할 동작을 지시할 수 있습니다.
토요일이거나 일요일일 때 "오늘은 주말입니다!"라는 메시지를 출력하고 싶다고 가정해 보겠습니다. 앞서 살펴본 switch 문에 다음 코드를 추가하면 됩니다:
...
case 5:
cout << "주말까지 하루 남았습니다!";
break;
default:
cout << "오늘은 주말입니다!";
break;
...
이 코드에 따르면 dayOfWeek가 지정한 어떤 case와도 일치하지 않는다면, 즉 dayOfWeek가 6 또는 7이라면 default 문의 내용이 실행됩니다. 예를 들어 오늘이 토요일이라면 콘솔에 다음 메시지가 출력됩니다:
오늘은 주말입니다!
마무리
switch 문은 C++에서 하나의 표현식을 여러 가능한 결과와 비교할 때 사용합니다. 표현식이 특정 case와 일치하면 그 결과에 연결된 코드가 실행되고, 일치하는 case가 없다면 default 문이 지정된 경우 그 내용이 실행됩니다.
이 글에서는 예제와 함께 C++ switch 문의 사용법과 break, default 키워드의 활용법을 알아봤습니다. 이제 여러분도 프로처럼 코드에서 switch 문을 활용할 준비가 되었습니다!