210222_B책_매직 넘버를 상수로 대체

정재현·2021년 2월 22일
0

TIL

목록 보기
74/80

오늘부터는 2장에 들어간다.
2장에서는 1장에서 논했던 기초 내용을 뛰어 넘는 레벨 업 내용이라고 한다.
더 향상된 수많은 자바 언어 개념과 코드 스타일 측면을 함께 살펴볼텐데,
가능하면 자주 자바API를 다룬다고 해서 기대된다.

2.1 <매직 넘버를 상수로 대체>
프로그래머는 자주 코드에서 옵션 집합을 표현할 때 종종 숫자 집합을 사용하게 되는데.
특별한 맥락없이 이 숫자를 매직넘버라고 한다. 그리고 이 매직넘버를 이용해서 프로그램의 동작을 제어한다.
무슨말인지는 밑에서 코드를 볼 것이고! 그렇지만 매직넘버가 있으면 코드를 이해하기 어려워지고 오류가 발생하기도 쉽다고 한다.

예제 코드를 보자면,

class CruiseControl {
 private double targetSpeedKmh;
 void setPreset(int speedPreset) {
  if (speedPreset == 2) {
   setTargetSpeedKmh(16994);
  } else if (speedPreset == 1) {
   setTargetSpeedKmh(7667);
  } else if (speedPreset == 0) {
   setTargetSpeedKmh(0);
  }
 }
 
 void setTargetSpeedKmh(double speed) {
  targetSpeedKmh = speed;
 }
}

이러한 targetSpeedKmh를 매직넘버라고 하는것이다.
이러한 매직넘버의 예제코드가 만약 100줄이라면..?
누가보아도 한눈에 이해하기 어려울 것이다.

class CruiseControl { 
 static final int STOP_PRESET = 0;
 static final int PLANETARY_SPEED_PRESET = 1;
 static final int CRUISE_SPEED_PRESET = 2;
 
 static final int CRUISE_SPEED_KMH = 16994;
 static final int PLANETARY_SPEED_KMH = 7667;
 static final int STOP_SPEED_KMH = 0;
 
 private double targetSpeedKmh;
 
 void setPreset(int speedPreset) {
  if (speedPreset == CRUISE_SPEED_PRESET) {
   setTargetSpeedKmh(CRUISE_SPEED_KMH);
  } else if (speedPreset == PLANETARY_SPEED_PRESET) {
   setTargetSpeedKmh(PLANETARY_SPEED_KMH);
  } else if (speedPreset == STOP_PRESET) {
   setTargetSpeedKmh(STOP_SPEED_KMH);
  }
 }
 
 void setTargetSpeedKmh(double speed) {
  targetSpeedKmh = speed;
 }
}

이렇게 매직넘버를 없애고 상수화 시켰다.
static 과 final을 사용하여 딱 한번만 존재하게하거고 바뀌지 않는 값으로.
그리고 자바 코드 규칙에 따라 상수는 대문자로 사용하였다.

이렇게 변수명을 넣으니 사전 속도 설정과 타깃 속도가 훨씬 명확해졌습니다.
=> (업무시에 코드를 볼 때 자주 상수화를 시킨 코드를 많이 보았기때문에 상당히 익숙한 대목이다.)
하지만 여기서 더 향상시킬 수 있다고 한다.
바로 2.2 <정수 상수 대신 열거형> 에서!

오늘의 코멘트: 실력을 레벨업 할 수 있도록 2장도 화이팅!!

profile
"돈받고 일하면 프로다"

0개의 댓글