조건문 switch
switch 문 개요
switch 문은 여러 가지 경우 중 하나를 선택하여 실행하는 제어 구조입니다.
주로 하나의 변수나 표현식의 값에 따라 여러 가지 경우를 처리할 때 사용합니다.
if-else 문의 연속보다 가독성이 좋고, 컴파일러 최적화에 유리할 수 있습니다.
switch 문의 기본 구조
switch 문의 특징
- 표현식은 정수형
int
,char
등 또는 열거형이어야 합니다. - case 라벨은 컴파일 시점에 결정되는 상수여야 합니다.
- break 문을 만나면 switch 문을 빠져나갑니다.
- default 라벨은 선택사항이며, 어떤 case와도 일치하지 않을 때 실행됩니다.
switch 문 예제
기본 예제 : 요일 출력
이 예제에서는 "Wednesday"가 출력됩니다.
break 문의 중요성
break 문을 생략하면 "fall through" 현상이 발생합니다.
이는 다음 case의 코드도 실행되는 현상입니다.
이 예제에서는 "Two", "Three", "Default"가 모두 출력됩니다.
의도적인 fall through
때로는 의도적으로 fall through를 사용할 수 있습니다.
이 경우 주석으로 명시하는 것이 좋습니다.
이 예제에서는 "Pass"가 출력됩니다.
switch 문 vs if-else 문
1. 가독성 : 많은 경우의 수를 처리할 때 switch 문이 더 가독성이 좋습니다.
2. 성능 : switch 문은 컴파일러 최적화에 더 유리할 수 있습니다.
3. 유연성 : if-else 문은 범위 비교나 불연속적인 값을 처리할 때 더 유용합니다.
C++ 17의 switch 문 초기화
C++ 17부터는 switch 문에서도 초기화 구문을 사용할 수 있습니다.
주의사항
- case 라벨에는 변수나 범위 지정을 사용할 수 없습니다.
- switch 문 내에서 변수를 선언할 때는 중괄호로 블록을 만들어야 합니다.
- 열거형을 사용할 때는 모든 case를 처리하거나, default를 사용하는 것이 좋습니다.
- break를 빼먹지 않도록 주의해야 합니다. 의도적인 fall through는 주석으로 표시하세요.
연습 문제
- 간단한 계산기 프로그램을 작성하세요. 사용자로부터 두 개의 숫자와 연산자
+
,-
,*
,/
를 입력받아 결과를 출력하는 프로그램을 switch 문을 사용하여 구현하세요. - 월 번호를 입력받아 해당 월의 일수를 출력하는 프로그램을 작성하세요. (윤년은 고려하지 않아도 됩니다)
- 학점을 입력받아 등급(A : Excellent, B : Good, C : Average, D : Poor, F : Fail)을 출력하는 프로그램을 작성하세요.
- 1부터 5까지의 숫자를 입력받아 해당하는 로마 숫자를 출력하는 프로그램을 작성하세요. (I, II, III, IV, V)
- 열거형을 사용하여 요일을 나타내고, switch 문을 사용하여 평일인지 주말인지 출력하는 프로그램을 작성하세요.
참고자료
- C++ 공식 문서의 switch 문 섹션 : C++ switch statement
- C++ 17 switch 문 초기화 : Switch statement with initializer
- C++ Core Guidelines의 switch 문 관련 규칙 : ES.78 : Don't rely on implicit fall-through in switch statements
- Effective C++ : 항목 3 "가능한 한 const를 사용하라" - Scott Meyers (switch 문에서 const의 활용)