switch

switch 폐쇄 선택지

switch는 여러 조건을 나열하는 도구가 아니라 하나의 판별 값이 어떤 경우인지 분기하는 도구다. fallthrough와 default 정책을 분명히 해야 한다.

01

판별 값을 정한다

복잡한 조건식 여러 개라면 switch보다 if 체인이 자연스럽다. switch는 한 값의 선택지에 적합하다.

02

fallthrough 표시

의도된 fallthrough는 주석이나 [[fallthrough]]로 남기고, 대부분은 break로 닫는다.

03

default 설계

enum class의 모든 값을 처리할지, 알 수 없는 값을 오류로 볼지 정한다.

enum class
명확한 선택지 case 값이 도메인 이름을 가지므로 숫자보다 안전하다.
암시 정수 변환도 줄어든다.
fallthrough
의도 표시 필요 break 누락은 가장 흔한 switch 버그다.
컴파일러 경고를 켠다.
default
미지 값 처리 프로토콜 입력처럼 외부 값이면 default에서 거절하는 편이 안전하다.
내부 enum은 경고를 활용할 수 있다.
범위
case 안 변수 case에서 변수를 선언할 때 중괄호로 범위를 분리한다.
초기화 건너뛰기 오류를 피한다.

break · 판별 기준 · 외부 입력 점검

break 각 case가 의도대로 닫히거나 명시적으로 fallthrough를 표시하는가.
판별 기준 하나의 값이 아니라 여러 조건을 검사한다면 if가 더 맞지 않은가.
외부 입력 파일이나 네트워크에서 온 값이 default에서 안전하게 거절되는가.

enum switch

switch (state) {
case State::Ready: run(); break;
case State::Stopped: cleanup(); break;
default: throw std::runtime_error("unknown state");
}