오늘부터는 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장도 화이팅!!