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