Java

Enum

혀눅짱 2023. 10. 27. 11:10

enum은 열거형(enumerated type)이라고 부른다. 열거형은 서로 연관된 상수들의 집합이라고 할 수 있다.  

 

enum은 class, interface와 동급의 형식을 가지는 단위다. 하지만 enum은 사실상 class이다. 편의를 위해서 enum만을 위한 문법적 형식을 가지고 있기 때문에 구분하기 위해서 enum이라는 키워드를 사용하는 것이다.

 

예시

public enum Week {
    MONDAY("mon", 10),
    TUESDAY("tue", 20),
    WEDNESDAY("wed", 30),
    THURSDAY("thu", 40),
    FRIDAY("fri", 50),
    STURDAY("sat", 60),
    SUNDAY("sun", 70);

    private final String title;
    private final int value;

    Week(String title, int value) {
        this.title = title;
        this.value = value;
    }

    public String getTitle() {
        return title;
    }

    public int getValue() {
        return value;
    }
}

 

 

 

enum을 사용하는 이유를 정리하면 아래와 같다.

  • 코드가 단순해진다.
  • 인스턴스 생성과 상속을 방지한다.
  • 키워드 enum을 사용하기 때문에 구현의 의도가 열거임을 분명하게 나타낼 수 있다.

 

 

enum은 생성자를 가질 수 있다. 생성자로부터 전달받은 인자가 enum의 필드의 밸류가 된다. 그렇기때문에 상수들에게 필드 값을 설정하고 싶다면 생성자를 통해 값을 전달한다.

 

해당 예시를 롬복을 통해 소스를 간략화 시킬 수 있다.

 

@Getter
@RequiredArgsConstructor
public enum Week {
    MONDAY("mon", 10),
    TUESDAY("tue", 20),
    WEDNESDAY("wed", 30),
    THURSDAY("thu", 40),
    FRIDAY("fri", 50),
    STURDAY("sat", 60),
    SUNDAY("sun", 70);

    private final String title;
    private final int value;


}

 

 

@GetMapping("enumTest")
public void enumTest(){
    for(Week week : Week.values()){
        System.out.println(week.name());
        System.out.println(week.getTitle());
        System.out.println(week.getValue());
        System.out.println("---------------------------");
    }
}

Enum의 values메소드는 해당 열거 상수집합을가져온다.

name메소드는 해당 enum의 이름을 문자열로 반환한다.