\(\texttt{switch}\) Statement
\(\texttt{switch}\) 구문
- 다음에 수행할 구문이 어느 행인지를 알려 주는 경로 결정기와 같은 구문이다.
- int형을 리턴하는 표현식\(\texttt{(int_Expr)}\)의 값에 정확히 일치하는 레이블이 붙어 있는 행으로 Branching(분기)한다.
- 이 때문에 switch 구문의 표현식은 필히 int형을 리턴해야 하며, 각 레이블 또한 정수 상수 표현식으로 구성되어져야 한다. (int형 상수, char형 상수, 열거자에 선언된 기호 상수 등이 레이블의 값이 될 수 있다.)
- \(\texttt{(int_Expr)}\)에 해당되는 레이블이 없으면 \(\texttt{default}\) 레이블로 분기한다.
(\(\texttt{default}\) 레이블은 생략이 가능하다.)
- C++에서 각각의 case Label 들은 행 레이블로만 작용하며 선택의 경계로 작용하지 않는다.
(이산적인 성격을 가진다 = 사잇값들에 대한 판단이 이루어지지 않는다)
switch 구문의 일반형
switch (int_Expr) {
case Label_1 : Statement(s)
break;
case Label_2 : Statement(s)
break;
...
default : Statement(s)
}
- break 구문이 없을 경우, 특정 레이블의 구문의 완전히 실행된 후, switch구문을 탈출하지 않고 그 다음 레이블에 해당하는 구문으로 실행흐름을 넘긴다.
- break 구문이 switch 구문에 필수적인 구문은 아니며, break구문이 없다고해서 컴파일 에러가 발생하지는 않는다.
Ex. switch 구문에서 break 구문의 활용 예시
switch (choice) {
case 'a' :
case 'A' : Statement(s)
break;
case 'r' :
case 'R' : Statement(s)
break;
default : Statement(s)
}
- 위와 같은 switch 구문의 특성을 활용한 break 구문 활용은 사용자가 소문자로 입력하든 대문자로 입력하든 상관없이 쉽게 범용적으로 설계할 수 있게한다.
\(\texttt{switch}\) Statement vs \(\texttt{if else}\) Statement
- \(\texttt{switch}\) 구문과 \(\texttt{if else}\) 구문 둘 다 여러 선택 사항 중 하나만을 선택해야 할 때 사용하는 Conditional Statement(조건문)이다.
- \(\texttt{switch}\) 구문은 값의 범위를 다룰 수 없으며 각 case 레이블은 단일 값이어야 하고, 이러한 특성으로 인해 선택 사항이 3개 이상인 경우에 실행 속도 측면에서 \(\texttt{if else}\) 구문보다 나은 성능을 보인다.
- \(\texttt{if else}\) 구문은 값의 범위를 다룰 수 있어 부동 소수점수에 대한 조건 검사나 두 개 이상의 변수를 비교할 수 있다.