자바가 제공하는 열거형(Enum)에 관해 알기 위해서 먼저 그 배경을 알아야한다.
package enumeration;
public class DiscountService {
public int discount(String grade, int price) {
int discountPercent = 0;
if (grade.equals("basic")) {
discountPercent = 10;
} else if (grade.equals("gold")) {
discountPercent = 20;
} else if (grade.equals("diamond")) {
discountPercent = 30;
} else {
System.out.println(grade + ": 할인X");
}
return price * discountPercent / 100;
}
}
등급에 따라 할인을 해주는 로직이 있다고 해보자.
package enumeration;
public class StringGrade_Ex0_2 {
public static void main(String[] args) {
int price = 10000;
DiscountService discountService = new DiscountService();
// 존재하지 않는 등급
int vip = discountService.discount("vip", price);
System.out.println(vip);
// 오타
int diamond = discountService.discount("DIAMOND", price);
System.out.println(vip);
// 대문자 입력
int gold = discountService.discount("GOLD", price);
System.out.println(gold);
}
}
다만, 현재 실행 클래스의 문자열은 제대로 입력 되지 않았다.
단순히 문자열을 입력하는 방식은 오타가 발생하기 쉽고, 유효하지 않은 값을 입력할 수 있다.
등급에 따른 문자열을 사용하는 방식은 이러한 문제점이 있다.
이러한 문제를 해결하기 위해서는 특정 범위로 값을 제한해야 한다.
하지만 String은 어떤 문자열도 받을 수 있기 때문에 자바 문법 관점에서는 문제가 없다.
결국 String 타입을 이용해서는 해당 문제를 해결할 수 없다.