2.1 매직 넘버를 상수로 대체

    class CruiseControl {
    
        private double targetSpeedKmh;
    
        void setPreset(int speedPreset) { 
            if (speedPreset == 2) {
                setTargetSpeedKmh(16944); 
            } else if (speedPreset == 1) {
                setTargetSpeedKmh(7667);
            } else if (speedPreset == 0) {
                setTargetSpeedKmh(0);
            }
        }
    
        void setTargetSpeedKmh(double speed) { 
            targetSpeedKmh = speed;
        } 
    }

    프로그래머는 코드에서 옵션 집합을 표현할 때 종종 숫자 집합을 사용합니다. 특별한 맥락없이 이 숫자를 매직 넘버, 즉 표면상 의미가 없는 숫자이지만 프로그램의 동작을 제어합니다. 매직 넘버가 있으면 코드를 이해하기 어려워지고 오류가 발생하기도 쉽습니다.

    위 코드 조각은 크루즈 제어를 묘사합니다. setPreset()을 정수와 함께 호출해 targetSpeedKmh를 설정함으로써 CruiseControl을 구체 값(concrete value)으로 변환하죠.

    위 방법은 오류가 발생하거나 오용되기 매우 쉽습니다. setPreset()을 호출하려면 메서드 내부에 대한 정교한 지식이 필요합니다. 그렇지 않으면 적절한 speedPreset을 입력으로 고를 수 없죠.

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