더북(TheBook)

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)라는 고전적인 버그가 남아 있습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.