프로그래밍에서 상수(static final)로 선언하지 않은 숫자를 매직 넘버, 문자열을 매직 리터럴이라 한다.
이를 정적(static)이고 변경 불가능(final)한 상수로 선언하여 사용하자.
코드에서 상수로 선언되어 있지 않은 숫자, 문자열은 무엇을 의미하는지 확신할 수 없다.
따라서 그 의미를 파악하기 위해 클래스를 이해하고, 코드의 흐름을 이해하기 위한 시간과 노력이 필요하게 된다.
이를 상수로 선언하게 됨으로써 불분명한 값들은 이름을 가지게 된다.
이름을 가지게 된 값은 그 이름만으로도 어떠한 역할을 하는지 알수 있게된다.
단, 숫자 1을 ONE으로 이름을 짓는 것과 같은 의미없는 상수 변환은 피하도록 하자.
AS-IS
public class Noise {
private final double decibel;
public Noise(double decibel) {
validate(decibel);
this.decibel = decibel;
}
private void validate(double decibel) {
if (decibel < 10.0) {
throw new IllegalArgumentException();
}
}
}
TO-BE
public class Noise {
private static final double BREATH_NOISE = 10.0;
private final double decibel;
public Noise(double decibel) {
validate(decibel);
this.decibel = decibel;
}
private void validate(double decibel) {
if (decibel < BREATH_NOISE) {
throw new IllegalArgumentException();
}
}
}
AS-IS validate 로직에서 decibel과 비교하는 값이 어떠한 값을 의미하는지 알 수 없는 매직 넘버로 되어있다.
TO-BE 에서는 매직넘버를 BREATH_NOISE 라는 상수로 추출하여 비교하던 값이 숨소리 라는 것을 알 수 있게 되었다.
'자바봄 > 리뷰' 카테고리의 다른 글
3. 상황에 따라 클래스변수/메서드와 인스턴스 변수/메서드를 적절하게 사용하자 (0) | 2020.03.04 |
---|---|
2. String + 연산대신 StringBuilder를 사용하자 (0) | 2020.03.04 |