이전 글에 이어 실제 사용하는 방법을 작성해보려고 한다!
enum Weeks {
MONDAY("mon"),
TUESDAY("tue"),
WEDNESDAY("wed"),
THURSDAY("thu"),
FRIDAY("fri"),
SATURDAY("sat"),
SUNDAY("sun");
private final String day;
Weeks (String day) {
this.day = day;
}
public String getDay(String day) {
}
}
이렇게 enum을 설정해주면,
for (Weeks week : Weeks.values()) { System.out.print(week.getDay + "\t"); }=>
mon tue wed thu fri sat sun
Weeks mon = Weeks.valueOf("MONDAY"); System.out.println(mon.getDay());=>
mon
for(Weeks week : Weeks.values()) { switch(week) { case SATURDAY: System.out.pring("토요일" + ", "); break; case SUNDAY: System.out.pring("일요일" + ", "); break; default: System.out.pring("평일" + ", "); break; } }=>
평일, 평일, 평일, 평일, 평일, 토요일, 일요일
System.out.println(Weeks.THURSDAY.ordinal());=>
3
위의 활용부분들을 보면
Weeks.getValues()는 Weeks를 담고 있는 배열로 출력된다.
따라서 인덱스 번호는 0부터 시작이 되므로 목요일의 .ordinal()은 3으로 출력된 걸 볼 수 있다.
뭔가 굳이 필요한 내용인가 싶으면서도🤔
사용하게 되면 정해진 범위 내에서 작업을 진행할 수 있어서 실수나 혼란이 적은 것 같았다.
해당 부분은 DB 상에 권한을 숫자(1,2,3, ...)나 줄임말로 표시하는 경우 화면단에서 매칭해서 보여주기 위해 진행하였다.
public enum RoleKey {
ADMIN("A", "ADMIN"),
MANAGER("M", "MANAGER"),
USER("U", "USER"),
GUEST("G", "GUEST");
private final String roleKey;
private final String roleName;
RoleKey(String roleKey, String roleName) {
this.roleKey = roleKey;
this.roleName = roleName;
}
public static String getRoleName(String roleKey) {
for(RoleKey role : values()) {
if(role.roleKey.equals(roleKey)) {
return role.roleName;
}
}
return null;
}
}
위의 내용에 대해서 service에서 아래와 같이 사용할 수 있다.
public UserDTO findByUserId(Long userId) { UserDTO user = userRepository.findUserByUserId(userId) .orElseThrow(() -> new CustomException(ErrorCode.USER_NOT_FOUND)); user.setUserRole(UserRole.getUserRole(user.getUserRole())); return user; }
DB에 담긴 값과 roleKey를 매칭시켜서 roleName으로 대체시킬 수 있다!
DB에 있는 값을 변경시키지 않고 enum 의 roleName만 수정하면 기존 데이터의 변형 없이 작업이 가능해진다.
만약 위와 같은 첫 글자도 변경이 예상된다면?!?!
public enum RoleNum {
ADMIN(1, "ADMIN"),
MANAGER(2, "MANAGER"),
USER(3, "USER"),
GUEST(4, "GUEST");
private final int roleNum;
private final String roleName;
RoleNum(int roleNum, String roleName) {
this.roleKey = roleKey;
this.roleName = roleName;
}
public static String getRoleName(int roleNum) {
for(RoleNum role : values()) {
if(role.roleNum.equals(roleNum)) {
return role.roleName;
}
}
return null;
}
}
이렇게 roleKey에 해당하는 부분을 roleNum 처럼 int로만 바꿔주면 얼마든지 더 편히 사용할 수 있다.
🚨🚨다만, 대신 DB 만으로는 어떤 역할인지 구분 불가능할 수 있다는 점을 참고해야 한다.