또한 speedPreset과 대응하는 실제 targetSpeedKmh가 임의적입니다. CruiseControl은 어떤 사전 속도 설정을 쓸 수 있는지 알려주지 않으니 옵션을 외울 수밖에 없습니다.

    매직 넘버를 사용하는 코드는 누가 보아도 이해하기 어렵습니다. 잘못 사용되기도 쉽고요. 컴파일러는 코드가 알지 못하는 수를 입력하지 못하도록 막을 방법이 없습니다.

    위 코드를 어떻게 향상시키고 숫자에서 매직을 없애는지 알아봅시다.

    class CruiseControl {
    
        static final int STOP_PRESET = 0;
        static final int PLANETARY_SPEED_PRESET = 1; 
        static final int CRUISE_SPEED_PRESET = 2;
    
        static final double CRUISE_SPEED_KMH = 16944; 
        static final double PLANETARY_SPEED_KMH = 7667; 
        static final double STOP_SPEED_KMH = 0;
    
        private double targetSpeedKmh;
    
        void setPreset(int speedPreset) { 
            if (speedPreset == CRUISE_SPEED_PRESET) {
                setTargetSpeedKmh(CRUISE_SPEED_KMH); 
            } else if (speedPreset == PLANETARY_SPEED_PRESET) {
                setTargetSpeedKmh(PLANETARY_SPEED_KMH);
            } else if (speedPreset == STOP_PRESET) {
                setTargetSpeedKmh(STOP_SPEED_KMH);
            }
        }
    
        void setTargetSpeedKmh(double speed) { 
            targetSpeedKmh = speed;
        } 
    }
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.