기존 레거시 코드를 개선하다가 매직넘버라는 개념을 알게되었다.
간단한 개념이지만 정리해보려 한다.
프로그래밍에서 코드에 하드코딩된 숫자나 문자열 값으로 그 의미가 명확히 드러나지 않는 값
// 매직 넘버 사용
if (score > 70) {
console.log("합격");
}
가독성 저하
그값이 뭘 의미하는 지 코드만으로는 알기 어렵다.
숫자의 의미를 추론하기 위해 불필요한 시간이 소모된다.
ex) if(score > 70)에서 70이 뭘 의미하는 지 코드를 작성한 사람이 아니면 알기 힘들다.
유지보수 어려움
동일한 매직넘버가 여러 곳에서 사용한다면, 해당 값을 변경할 때 모든 코드를 수정해야한다.
오류 발생 가능성
매직넘버가 다른 의미로 사용되는 경우, 잘못된 수정으로 인해 오류가 발생할 수 있다.
const PASSING_SCORE = 70;
if (score > PASSING_SCORE) {
console.log("합격");
}
public enum ProductType {
DEPOSIT_ACCOUNT("1", "입출금통장"),
PARTY_ACCOUNT("2", "모임통장");
private String code;
private String name;
ProductType(String code, String name) {
this.code = code;
this.name = name;
}
}
그렇다고 해서 모든 숫자를 매직넘버로 만들 필요는 없다.
반복문의 i=0같은 기본적인 값이나 굳이 만들 필요가 없는걸 다 치환할 필요는 없다.
중요한 의미를 가진 값만 상수로 치환하는 것이 좋다.