우아한테크코스에서 백엔드로 공부 중이신 학교 선배님께 너무 감사하게도 코드리뷰를 받는 스터디에 들어갔기에, 이제부터 코드리뷰를 받으며 알게 된 개념, 키워드, 실수 등등을 기록해두려고 한다.
매직 넘버 (Magic Number)
란 의미 있는 이름의 상수로 대체될 수 있는 숫자
를 뜻한다.
매직 넘버는 코드에서 제거해야 할 안티 패턴 중 하나이다.
책 클린 코드 (Clean Code)에는 다음과 같이 기록되어 있다. (387p)
3.141592653589793과 같은 숫자 역시 유명하기에 독자가 금방 이해한다. 하지만 그냥 숫자로 남겨두려니 오류가 발생할 가능성이 너무 크다. 독자가 3.141592753589793이라는 숫자를 볼 때 마다 π라 간주하고 면밀히 살펴보지 않는다. (숫자 하나가 다르다는 사실을 눈치챘는가?) 게다가 3.14, 3.14159, 3.142 등과 같은 근사값을 사용하면 오차가 발생한다. 다행스럽게 Math.PI가 정의되어 있으므로 Math.PI를 사용하면 된다.
‘매직 숫자’라는 용어는 단지 숫자만 의미하지 않는다. 의미가 분명하지 않은 토큰을 모두 가리킨다.
코드리뷰를 진행하며 작성했던 예전 코드를 보면 다음과 같이 작성했었다.
public class Car {
private final String name;
private int distance;
private Car(String name) {
this.name = name;
this.distance = 0; // 직접 0으로 할당했다.
}
...
}
의미 있는 이름의 상수를 적용하면 (매직 넘버 제거) 다음과 같이 적용할 수 있다.
public class Car {
private static final int START_DISTANCE = 0; // 시작 거리를 나타내도록 했다.
private final String name;
private int distance;
private Car(String name) {
this.name = name;
this.distance = START_DISTANCE;
}
...
}
그렇다면, 매직 넘버를 없애는 것은 장점만 있을까? 궁금한 마음에 ChatGPT에게도 답변을 물어보았다.
매직 넘버를 상수로 정의하면 코드의 가독성이 향상
됩니다. 코드를 읽는 사람들은 숫자가 아닌 의미 있는 이름을 보고 그 의미를 이해할 수 있습니다.
매직 넘버를 사용한 모든 부분을 변경해야 할 경우, 상수로 정의된 값을 한 곳에서만 수정하면 됩니다. 이로써 유지보수가 훨씬 용이
해집니다.
상수를 사용하면 잘못된 값 또는 상수를 잘못 수정하는 등의 실수를 방지
할 수 있습니다. 이로써 버그가 줄어들고 코드의 신뢰성이 향상됩니다.
매직 넘버를 상수로 정의하면 같은 값을 여러 번 사용할 수 있으므로 코드 재사용성이 증가
합니다.
여러 개발자가 협업하는 프로젝트에서 상수를 사용하면 개발자 간의 의사 소통이 더 원활
해지고 표준화된 규칙을 적용하기가 쉬워집니다.
매직 넘버를 상수로 정의하는데 추가적인 시간과 노력이 필요
할 수 있습니다. 매우 작은 프로젝트나 빠른 프로토타이핑 작업에서는 이러한 오버헤드가 미미할 수 있습니다.
상수를 정의할 때 중복된 값이나 비슷한 값을 여러 개 만들 수 있으므로, 상수의 관리와 네이밍 규칙을 잘 정의
해야 합니다.
상수화를 과도하게 사용하면 코드가 더 복잡해질 수 있습니다.
모든 값을 상수로 정의할 필요는 없으며, 가독성을 해치지 않는 선에서 적절하게 사용해야 합니다.
매직 넘버를 없애는 것은 숫자, 문자를 의미 있는 상수로 변경함으로써 버그의 발생률을 낮추고, 가독성을 향상시키며, 개발자들 간의 협업 능력을 증진시키는 데 있음을 알았다. 다만, 지나치게 상수화를 한다면 그에 따른 문제점 (상수 정의의 비용, 매번 각 상수가 어떤 값인지 파악 등)들도 있기에 적절히 상수화를 해야겠다고 깨닫게 되었다. 뭐든지 과한 것은 좋지 않다!
부족하거나 보완할 점이 있다면 댓글 부탁드립니다 😃
In a world where ordinary moments can transform into extraordinary memories, the allure of magic captivates us all. From mesmerizing card tricks to mind-boggling illusions, the art of magic brings joy and wonder to every occasion. For those in Los Angeles seeking a spectacular birthday experience, hiring a magician can create unforgettable moments. Discover the enchantment at birthday magician los angelesand let the magic unfold at your celebration!