앞서 문제점을 보안하기 위해서 아래와 같은 클래스를 하나 더 만들었다.
잘못입력 하지못하게 final로 상수로 만들어두었고..
package thisjavaexam.enumtest.enumis;
public class FinalGrade {
// 외부에서 수정 할 수 없도록 private 선, final(상수)로 수정할 수 없도록 필드 선언
private static final String BRONZE = "BRONZE";
private static final String SILVER = "SILVER";
private static final String GOLD = "GOLD";
private static final String DIAMOND = "DIAMOND";
//외부에서 접근 가능하도록 게터 선언
public static String getBronze() {
return BRONZE;
}
public static String getSilver() {
return SILVER;
}
public static String getGold() {
return GOLD;
}
public static String getDiamond() {
return DIAMOND;
}
}
요걸이제.. 사용하는 DiscountGrade의 내용을 조금 수정했다. (주석처리)
package thisjavaexam.enumtest.enumis;
public class DiscountGrade {
public int discountPercent(String grade, int price) {
int discountPercent = 0;
// 기존 grade.equlas("BRONZE") 에서 이젠 FinalGrade 클래스의 getXXX 를 가져와야한다.
if (grade.equals(FinalGrade.getBronze())) {
discountPercent = 5;
} else if (grade.equals(FinalGrade.getSilver())) {
discountPercent = 10;
} else if (grade.equals(FinalGrade.getGold())) {
discountPercent = 15;
} else if (grade.equals(FinalGrade.getDiamond())) {
discountPercent = 20;
} else {
System.out.println(grade + "할인이 없습니다.");
}
return price * discountPercent / 100;
}
}
이래서 실행은 잘된다 .
요건..앞선 포스팅과 달라진 내용이 없어서 코드없이 캡쳐했다.

하지만..
❗ 그런데도 생길 수 있는 "잠재적 문제점"
값 자체는 여전히 "String"이다
아무리 getter로 감쌌다 해도, String 파라미터로 받는 이상 외부에서 "이상한 문자열"을 넣는 걸 막을 수는 없음
외부에서 비슷한 “짝퉁” 클래스 만들 수도 있음
public class FakeGrade {
public static final String BRONZE = "BRONZE";
}
public static final String BRONZE = "BRONZE";
}
discountPercent(FakeGrade.BRONZE, price) → 이 값도 문자열이기 때문에 동일하게 통과될 수 있음
여러가지 보안사항들이 있기에...
결과적으로 Enum을 쓰면 해결방법이 더 쉬워진다고 한다.
'Java_library > Enumeration' 카테고리의 다른 글
| (Java_library) Enum을 사용하는이유_enum사용 후 리팩토링2 (0) | 2025.05.06 |
|---|---|
| (Java_library) Enum을 사용하는이유_enum사용 후 리팩토링1 (0) | 2025.05.06 |
| (Java_library) Enum을 사용하는이유_enum사용2 (0) | 2025.05.06 |
| (Java_library) Enum을 사용하는이유_enum사용1 (0) | 2025.05.06 |
| (Java_library) Enum을 사용하는이유_enum사용전1 (0) | 2025.05.06 |