더북(TheBook)

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을 입력으로 고를 수 없죠.

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