public final class PaymentStatusCodes {
public static final String READY = "READY";
public static final String PAID = "PAID";
public static final String FAILED = "FAILED";
}
public class PaymentService {
public void changeStatus(String status) {
System.out.println("결제 상태 변경: " + status);
}
public static void main(String[] args) {
PaymentService paymentService = new PaymentService();
paymentService.changeStatus(PaymentStatusCodes.PAID);
paymentService.changeStatus("ADMIN");
paymentService.changeStatus("UNKNOWN");
}
}
String은 값일 뿐, 결제 상태라는 타입이 아닙니다."PAID"와 "ADMIN"은 모두 String이라 컴파일러가 구분하지 못합니다.즉, static final 상수는 상수 집합은 만들 수 있어도 도메인 타입은 만들지 못합니다.
결제 상태를 문자열이 아니라 아예 타입으로 만들면 됩니다.
그 답이 enum입니다.
public enum PaymentStatus {
READY,
PAID,
FAILED
}
public class PaymentService {
public void changeStatus(PaymentStatus status) {
System.out.println("결제 상태 변경: " + status);
}
}
이제 아래 코드는 컴파일되지 않습니다.
PaymentService paymentService = new PaymentService();
paymentService.changeStatus(PaymentStatus.PAID);
paymentService.changeStatus("ADMIN"); <-- 문제 발생
String 기반 상수는 값 비교에 의존합니다.