열심히 해 2024. 10. 10. 10:25

Enum(enumeration : 열거)

 

제한된 목록에서 값을 가져와 사용하기 위해 만듭니다!

 

제한된 목록이란 예를 들어

 

성별의 남, 여

 

요일의 월, 화, 수, 목, 금, 토, 일

 

계절의 봄, 여름, 가을, 겨울

 

월, 혈액형 등이 있습니다.

 


Enum

public enum Season {
    // 변하지 않는 값이기에 상수처럼 대문자로 적는 것이 관례
    SPRING,
    SUMMER,
    FALL,
    WINTER
}

 

 

Enum

public enum Week {
    MONDAY,
    TUESDAY,
    WEDNESDAY,
//    WENDESDAY  동일한 값 넣을 수 없음
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY,
    FALL
}

 

 

Class

import java.util.Calendar;

public class Main {
    public static void main(String[] args) {
        // 참조 타입이기에 null로 초기화 가능
        Week today = null;
        Season season = null;
        // 열거값 대입
        today = Week.FRIDAY;
        season = Season.FALL;
        // 열거값 비교
        if (season != Season.FALL) { // Week 에 FALL 이라는 값이 있음에도 season == Week.FALL 불가.
            System.out.println("가을");
        } else {
            System.out.println("가을이 아닙니다");
        }

        // Calendar 객체 생성
        Calendar calendar = Calendar.getInstance();
        // Calendar의 메서드를 이용해서 변수에 저장
        int month = calendar.get(Calendar.MONTH);

        switch (month) {
            case 3, 4, 5:
                System.out.println("봄");
                break;
            case 6, 7, 8:
                System.out.println("여름");
                break;
            case 9, 10, 11:
                System.out.println("가을");
                break;
            case 12, 1, 2:
                System.out.println("겨울");
                break;
        }
    }
}

 

 

 


 

 

enum은 사실 단순한 상수 집합 이상의 기능을 제공하는 특별한 클래스입니다. 각 열거형 값(USER, ADMIN)이 실제로는 enum의 인스턴스이며, 생성자를 통해 초기화될 수 있습니다.

 

 

public enum UserRoleEnum {
    USER(Authority.USER),  // USER는 생성자를 통해 Authority.USER 값으로 초기화됨
    ADMIN(Authority.ADMIN);  // ADMIN도 동일하게 Authority.ADMIN 값으로 초기화됨

    private final String authority;

    // 생성자: String 타입의 authority를 받는 생성자
    UserRoleEnum(String authority) {
        this.authority = authority;
    }

    public String getAuthority() {
        return this.authority;
    }

    public static class Authority {
        public static final String USER = "ROLE_USER";
        public static final String ADMIN = "ROLE_ADMIN";
    }
}