Enum 사용하기

niz w·2024년 11월 28일

Spring

목록 보기
10/17

이전 글에 이어 실제 사용하는 방법을 작성해보려고 한다!



🎈 요일 예시

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으로 출력된 걸 볼 수 있다.

뭔가 굳이 필요한 내용인가 싶으면서도🤔
사용하게 되면 정해진 범위 내에서 작업을 진행할 수 있어서 실수나 혼란이 적은 것 같았다.




🎈 권한(Role) 예시

해당 부분은 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에 있는 값을 변경시키지 않고 enumroleName만 수정하면 기존 데이터의 변형 없이 작업이 가능해진다.



만약 위와 같은 첫 글자도 변경이 예상된다면?!?!

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 만으로는 어떤 역할인지 구분 불가능할 수 있다는 점을 참고해야 한다.

0개의 댓글