더북(TheBook)

보다시피 자바 타입 시스템은 가끔 들어오는 유효하지 않은 입력값을 막는 데 큰 역할을 합니다. 예제처럼 가능한 옵션을 모두 열거할 수 있다면 항상 정수 대신 enum 타입을 사용하세요.

해법에서는 SpeedPreset이라는 새 enum을 생성하고 여기에 주어진 인스턴스의 speedKmh를 저장하는 변수 하나를 넣었습니다. SpeedPreset enumSTOPPLANETARY_SPEED, CRUISE_SPEED라는 가능한 옵션을 모두 열거합니다.

주요 장점은 존재하지 않는 SpeedPreset을 더 이상 setPreset() 메서드로 넣을 수 없다는 것입니다. 시도해도 자바 컴파일러가 중지시킵니다.

또한 숫자 그대로가 아니라 2.1 매직 넘버를 상수로 대체에서처럼 여전히 의미 있는 이름으로 참조할 수 있습니다. 그 밖에 실제 targetSpeedKmh를 위한 상수도 이미 enum에 들어 있어서 제거했습니다.

마지막으로 setPreset()에서 if-elseif 블록도 제거할 수 있었습니다. 이제 코드는 덜 복잡하고 한결 간결해졌습니다.

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