만약 등급에따라서 할인율을 조정하는 코드를 만든다고 치자
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");
}
//(10000 * 20) / 100
return price * discountPercent / 100;
}
}
이 코드는 아주 위험하다 왜냐하면
존재하지 않는 vip라는 등급을 discount 파라미터에 입력하면
할인 적용이 안되고
BASIC인데 BASICC이라고 오타를 낼 수도 있다.
이렇게 String 방식으로 사용하면 문제가 있다.
타입 안정성 부족:문자열은 오타가 생길 수 있고,유효하지 않은 값이 입력될 수 있다.
데이터 일관성:"BASIC","basic"등 다양한 형식으로 입력할 수 있기 때문에 일관성 down
컴파일 시 오류 감지 불가:이러한 문자열들은 컴파일 시에는 감지X, 런타임에서만 문제가 발견되기 때문에 디버깅 어려워짐.
해결방안:
특정 범위로 값을 제한
BASIC,GOLD,DIAMOND라는 정확한 문자만 전달되어야 한다. 하지만 String 타입은 아무 문자열이나 받을 수 있기 때문에 ENUM타입을 사용해서 코딩을 해야한다!
Enum의 장점:
타입 안정성 향상
: 열거형은 사전에 정의된 상수들로만 구성되므로, 유효하지 않은 값이 입력될 가능성이 없다.
이런 경우 컴파일 오류가 발생한다.
간결성 및 일관성
: 열거형을 사용하면 코드가 더 간결하고 명확해지며, 데이터의 일관성이 보장된다.
확장성
: 새로운 회원 등급에 타입을 추가하고 싶을 때, ENUM에 새로운 상수를 추가하기만 하면 된다.