1.6 스위치 실패 피하기
class BoardComputer { CruiseControl cruiseControl; void authorize(User user) { Objects.requireNonNull(user); switch (user.getRank()) { case UNKNOWN: cruiseControl.logUnauthorizedAccessAttempt(); case ASTRONAUT: cruiseControl.grantAccess(user); break; case COMMANDER: cruiseControl.grantAccess(user); cruiseControl.grantAdminAccess(user); break; } } }
지난 수년 간 수많은 버그의 원인으로 악명을 떨친 프로그래밍 언어 구조체가 여러 개 있습니다. 그 중 하나가 switch입니다. 스위치를 쓸 때는 주의하는 것이 좋습니다.
위 코드의 authorizeUser()는 매개변수를 검증하고 null 참조를 확인합니다. 자바 API에 있는 편리한 매개변수 검증 방법인 Objects.requireNonNull()을 사용해 입력이 널이면 예외를 발생시킵니다. 하지만 authorizeUser()에는 스위치 실패(switch fallthrough)라는 고전적인 버그가 남아 있습니다.