🤔 상수를 하나의 클래스에 모으는 것이 좋을까?
우테코 프리코스때는 Rules
라는 클래스를 만드어, 이곳에 상수를 모아주었다.
public class Rules {
public static final int START_INCLUSIVE = 1;
public static final int END_INCLUSIVE = 45;
public static final int NUMBER_LENGTH = 6;
public static final int LOTTO_PRICE = 1_000;
public static final String MAX_PURCHASE_PRICE = "1,000,000,000";
}
하지만 해당 클래스만 봤을 때, 해당 상수가 정확히 어떤 의미인지 파악하기 어려울 수 있다.
상수도 변수처럼 생각하면 좋을 것 같다.
변수의 경우, 한 메서드에서만 사용되면 메서드 내부에, 블럭 안에서만 사용되면 블럭 내부에 넣는다.
상수도 똑같이 생각하면 된다!
한 클래스에서만 사용되면 클래스 상수로 선언하고, 반대로 여러 곳에서 공통적으로 사용되면 공통폴더에 두고 관리한다.
한 클래스에서만 사용되는 상수인 경우 → 클래스 상수로 선언한다.
public class CarName {
private static final int MIN_CAR_NAME_LENGTH = 1;
private static final int MAX_CAR_NAME_LENGTH = 5;
private void validateLength(final String carName) {
if (carName.length() < MIN_CAR_NAME_LENGTH || carName.length() > MAX_CAR_NAME_LENGTH) {
throw new IllegalArgumentException();
}
}
}
위의 예시에서, 자동차 이름 범위(1~5)는 CarName 클래스에서만 사용하기 때문에 클래스 상수로 MIN_CAR_NAME_LENGTH
와 MAX_CAR_NAME_LENGTH
를 선언해줬다.
여러 곳에서 공통적으로 사용해야하는 상수 → 공통적으로 모아서 관리한다.
Enum이나 상수를 모아두는 클래스를 생성한다.
public enum CarType {
BENZ("벤츠"),
BMW("BMW"),
AUDI("아우디");
private final String carType;
CarType(String carType) {
this.carType = carType;
}
}
public class CarType {
public static final int BENZ = "벤츠";
public static final int BMW = "BMW";
public static final int AUDI = "아우디";
}
변경점이 한 곳으로 모아져서, 변경이 생겼을 때 해당 상수값만 수정해주면 된다.
예를들면, 벤츠
대신 메르세데스벤츠
로 바꾸고 싶으면, CarType에서 BENZ의 값을 메르세데스벤츠
로 변경해주면 된다.
'우테코 5기 > 레벨1' 카테고리의 다른 글
[체스 미션] 상속 대신 전략패턴 도입하기 (4) | 2023.03.28 |
---|---|
정적 팩토리 메서드로 생성자 다이어트 시키기 (4) | 2023.03.05 |
전략 패턴을 통한 테스트 (2) | 2023.02.17 |
View단에서 도메인 객체를 생성해 return하는게 좋을까, 아니면 입력값을 그대로 return하는게 좋을까? (3) | 2023.02.17 |
입력값 검증을 InputView에서 진행할까, Domain에서 진행할까? (1) | 2023.02.17 |