본문 바로가기

자바봄/리뷰

1. 의미가 불분명한 매직 넘버를 상수로 선언하라.

프로그래밍에서 상수(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 라는 상수로 추출하여 비교하던 값이 숨소리 라는 것을 알 수 있게 되었다. 

GitHub에서 예제 코드 보기