250411 TIL #630 클린코드 - 매직넘버

김춘복·2025년 4월 11일
0

TIL : Today I Learned

목록 보기
634/638

Today I Learned

기존 레거시 코드를 개선하다가 매직넘버라는 개념을 알게되었다.
간단한 개념이지만 정리해보려 한다.


매직넘버

프로그래밍에서 코드에 하드코딩된 숫자나 문자열 값으로 그 의미가 명확히 드러나지 않는 값

  • 코드에서 하드코딩된 숫자(또는 문자열)로, 그 의미가 명확하지 않아 코드의 가독성과 유지보수를 어렵게 만드는 안티 패턴으로 제거해야 한다.
// 매직 넘버 사용
if (score > 70) {
    console.log("합격");
}

문제점

  • 가독성 저하
    그값이 뭘 의미하는 지 코드만으로는 알기 어렵다.
    숫자의 의미를 추론하기 위해 불필요한 시간이 소모된다.
    ex) if(score > 70)에서 70이 뭘 의미하는 지 코드를 작성한 사람이 아니면 알기 힘들다.

  • 유지보수 어려움
    동일한 매직넘버가 여러 곳에서 사용한다면, 해당 값을 변경할 때 모든 코드를 수정해야한다.

  • 오류 발생 가능성
    매직넘버가 다른 의미로 사용되는 경우, 잘못된 수정으로 인해 오류가 발생할 수 있다.

해결책

  • 상수 사용
    해당 숫자를 상수로 지정해서 이름을 통해 분명하게 나타낸다.
const PASSING_SCORE = 70;

if (score > PASSING_SCORE) {
    console.log("합격");
}
  • ENUM 사용
  • Java같은 언어에서는 ENUM(열거형)을 지원하므로 이를 활용해 대체한다.
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같은 기본적인 값이나 굳이 만들 필요가 없는걸 다 치환할 필요는 없다.

  • 중요한 의미를 가진 값만 상수로 치환하는 것이 좋다.

profile
Full-Stack Dev / MLOps

0개의 댓글