Java Enum 클래스 동적 접근 예제
1. EnumUtil 클래스
Java에서 `enum` 클래스는 상수들을 관리하기 위한 편리한 방법을 제공합니다.
`EnumUtil` 클래스는 `enum` 클래스의 상수 이름과 값을 동적으로 매핑할 수 있는 유틸리티 클래스로, `enum`의 상수 값을 이름을 통해 찾거나, 그 반대로 값을 이용하여 이름을 찾을 수 있게 도와줍니다.
아래는 `EnumUtil` 클래스 코드입니다.
public class EnumUtil {
public static & EnumType> String getValueByName(Class enumClass, String name){
for(E enumConstant : enumClass.getEnumConstants()) {
if(enumConstant.name().equalsIgnoreCase(name)) {
return enumConstant.getValue();
}
}
return "";
}
public static & EnumType> String getNameByValue(Class enumClass, String value) {
for(E enumConstant : enumClass.getEnumConstants()) {
if(enumConstant.getValue().equalsIgnoreCase(value)){
return enumConstant.name();
}
}
return "";
}
public interface EnumType {
String getValue();
}
}
`EnumUtil` 클래스에는 두 개의 주요 메소드가 있습니다:
- getValueByName: `enum` 상수의 이름을 전달받아, 해당 상수의 값을 반환합니다.
- getNameByValue: `enum` 상수의 값을 전달받아, 해당 상수의 이름을 반환합니다.
두 메소드 모두 제네릭을 사용하여 `Enum` 클래스 타입과 `EnumType` 인터페이스를 상속받은 `enum` 클래스를 다룰 수 있습니다.
2. EnumType 인터페이스를 상속받은 Day 클래스
`EnumUtil` 클래스에서 사용할 `enum` 클래스를 예로 들겠습니다. 이 예제에서는 요일을 나타내는 `Day` enum 클래스를 만들고, 이를 `EnumType` 인터페이스로 확장하여 각 요일의 이름을 반환할 수 있도록 설정합니다.
public enum Day implements EnumUtil.EnumType {
MONDAY("월요일"),
TUESDAY("화요일"),
WEDNESDAY("수요일"),
THURSDAY("목요일"),
FRIDAY("금요일"),
SATURDAY("토요일"),
SUNDAY("일요일");
private String day;
private Day(String day){
this.day = day;
}
@Override
public String getValue() {
return day;
}
}
위 `Day` 클래스는 각 요일을 나타내는 `enum` 상수를 정의하며, `EnumType` 인터페이스를 구현하여 `getValue()` 메소드가 각 요일에 대한 문자열 값을 반환하도록 합니다. 이로써 각 요일 상수는 자신의 이름 외에도 해당하는 문자열 값(예: "월요일")을 가질 수 있게 됩니다.
3. 사용 예제
이제 `EnumUtil` 클래스와 `Day` 클래스를 활용하여 동적으로 `enum` 값과 이름을 가져오는 방법을 살펴봅니다.
예제 1: 이름으로 값 찾기
`getValueByName` 메소드를 사용하여 `enum` 상수 이름을 전달하고, 해당 상수의 값을 찾는 방법은 다음과 같습니다:
EnumUtil.getValueByName(Day.class, "MONDAY"); // "월요일" 반환
예제 2: 값으로 이름 찾기
반대로, `getNameByValue` 메소드를 사용하여 `enum` 값(예: "월요일")을 전달하고, 해당 상수의 이름을 찾을 수 있습니다:
EnumUtil.getNameByValue(Day.class, "월요일"); // "MONDAY" 반환
위의 예제에서 `MONDAY`의 값인 "월요일"을 찾거나, "월요일"의 이름인 `MONDAY`를 찾는 동작을 수행할 수 있습니다.
4. 추가 설명
Java의 `enum`은 기본적으로 `name()` 메소드와 `ordinal()` 메소드 등을 제공하여 상수의 이름과 순서를 반환할 수 있습니다. 하지만 `EnumUtil` 클래스를 사용하면, 각 상수에 대한 값까지 동적으로 관리할 수 있게 되어 더욱 유연하게 활용할 수 있습니다. 이를 통해 이름과 값 간의 변환을 쉽게 처리할 수 있습니다.
또한, `EnumType` 인터페이스를 활용하여 각 `enum` 상수가 자신만의 값을 갖도록 함으로써, 상수마다 고유한 값이 필요한 경우에 유용하게 사용할 수 있습니다.