Study/Java

[Java] enum type(열거 타입) 정리

dev_kong 2022. 11. 7. 17:56
728x90
728x90

0. 목차

1. 개요

2. enum type

1. 개요

그래도 약 1년간 프로젝트도 해보고, 코테준비도 했던 덕분인지
우테코 미션을 받았을 때 서비스 로직을 머릿속에 그리는 건 어렵지 않게 된다.


그런데 Java 기본 개념이 부족하다 보니, 서비스 로직을 코드로 옮기는 게 어렵다...
오늘은 쓰려고 할때마다 이거.. 뭐더라 하는 enum type 찢고 넘어가자.

2. enum type

데이터 중에는 몇가지의 한정된 값만을 갖는 경우가 있다.


뭐 예를들어 행정구역이라던가(서울, 부산, 대구 등등..), 계절이라던가(봄,여름,가을,겨울) 이런 애들을 enum type이라고 한다.

라는 식으로 되어있는 설명을 봤는데 뭔소리지 싶었다.

 

 

그냥 성질이 비슷한 상수(constant) 모아놓은 애라고 생각하면 된다.
..그냥 코드만 보는게 더 이해가 쉬울지도..

 

 

2-1. enum 선언

선언하는거 엄청 쉬움.
class랑 똑같다.

 

//Week.java
public enum Week {
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY
}

//Main.java
Week today = Week.MONDAY;

 

이런 식으로 사용을 하면 된다.
enum의 이름은 class와 같이 대문자로 시작하는 CamelCase이고,
각 상수의 이름은 대문자로 짓고, 단어간의 구분을 할때는 underbar(_)를 사용한다.

만약 저 MONDAY라는 String을 사용하고 싶다면, enum class에서 제공되는 name() 메소드를 사용하면 된다.

 

String todayString = Week.MONDAY.name();

 

위와 같이 사용하면 된다.

2-2. enum 활용

위의 사용예시에서 today의 type을 보면 알 수 있듯,
Week.Monday 는 Week 클래스의 instance 이다.

 

Week today = Week.MONDAY;
System.out.println(today instanceof Week);

 

 

이말인 즉, 생성자함수를 통해 변수에 할당을 해줄 수 있단 뜻이다.
아래와 같이 사용하면 된다.

 

public enum Week {
    MONDAY("monday"),
    TUESDAY("tuesday"),
    WEDNESDAY("wednesday"),
    THURSDAY("thursday"),
    FRIDAY("friday"),
    SATURDAY("saturday"),
    SUNDAY("sunday");

    private final String label;

    Week(String label) {
        this.label = label;
    }

    public String getLabel() {
        return this.label;
    }
}

 

물론 여러개의 변수도 할당 가능하다.

 

public enum Week {
    MONDAY("monday","월"),
    TUESDAY("tuesday","화"),
    WEDNESDAY("wednesday","수"),
    THURSDAY("thursday","목"),
    FRIDAY("friday","금"),
    SATURDAY("saturday","토"),
    SUNDAY("sunday","일");

    private final String label;
    private final String value;

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

    public String getLabel() {
        return this.label;
    }

    public String getValue() {
        return value;
    }
}

 

이정도면 사용하는데 지장은 없을듯 하다.
이제 까먹지 말아야지..

728x90
728x90