Java Enum

수정이·2022년 8월 13일
0

JAVA

목록 보기
8/8
post-thumbnail

Enum이 뭐야?

요일은 월화수목금토일이라는 한정된 값만 가진다. 이렇게 한정된 값만 가지는 데이터 타입이 열거 타입(Enumeration Type)이다.
프로젝트를 진행할 때, 테이블의 한 컬럼 값이 한정된 값만 가진다면(YES,NO 등) Enum타입으로 설정하면 좋다.

Enum의 장점

  • 문자열과 비교하여 IDE의 지원을 받을 수 있다.
    • 자동완성, 오타 검증, 텍스트 리팩토링을 받을 수 있다.
  • 코드가 단순해지고 가독성이 좋아진다.
  • 인스턴스 생성과 상속을 방지한다.
  • 리팩토링을 할 때, 변경 범위가 최소화 된다.

Enum 생성 및 사용

Enum 파일이 있어야한다. 간단하게 요일을 관리하는 Day.java 파일을 만들고, 그 안에 요일들을 정해주었다.

public enum Day {
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY
}

위와 같이 만들어준 요일들은 하나하나가 문자열이 아닌 열거 객체이다.
그래서 아래와 같이 사용할 수 없다.

public class test {
    public static void main(String[] args) throws IOException {
    	Day day1 = Day.MONDAY; // 이건 됩니다~
        String day2 = Day.MONDAY; // Error!!!!!!!
    }
}

String 타입 변수에 저장하려면 name() 메소드를 사용하면 된다.

public class test {
    public static void main(String[] args) throws IOException {
        
        String day = Day.MONDAY.name(); // 오류 없습니다~
    }
}

그 밖에도 valueOf(), values() 등 다른 메소드들이 있다.

valueOf() : 문자열을 통해 동일한 문자열인 열거 객체를 리턴한다.

public class test {
    public static void main(String[] args) throws IOException {

        String x = "WEDNESDAY";
        Day day = Day.valueOf(x);
        System.out.println("day = " + day); // day = WEDNESDAY
    }
}

values() : 열거 객체들을 배열로 만들어 준다.

public class test {
    public static void main(String[] args) throws IOException {
        Day[] values = Day.values();

        for (Day value : values) {
            System.out.println("value = " + value);
        }
    }
}
value = MONDAY
value = TUESDAY
value = WEDNESDAY
value = THURSDAY
value = FRIDAY
value = SATURDAY
value = SUNDAY

열거 상수와 다른 값을 연결

Enum 클래스는 같은 의미를 가지는 값들을 열거할 수 있다.

public enum Day {
    MONDAY("월요일"),
    TUESDAY("화요일"),
    WEDNESDAY("수요일"),
    THURSDAY("목요일"),
    FRIDAY("금요일"),
    SATURDAY("토요일"),
    SUNDAY("일요일");
    
    private final String label;

    private Day(String label) {
        this.label = label;
    }

    public String getLabel() {
        return label;
    }
}

위와 같이 MONDAY월요일 이나 영어, 한국어 차이이지 의미는 같다. 그러므로 위와 같이 설정해두면 나중에 프로젝트를 진행할 때, 값이 한국어로 들어와도 Enum으로 처리할 수 있다.

  • 단 열거할 때는, Enum 클래스 안에 열거한 변수를 선언해주고, 생성자를 만들어야한다.
    • 생성자의 default type이 private 이기 때문에, 외부에서는 생성자를 통해 생성할 수 없다.
  • 열거한 값을 입력 받기 위해 getLabel() 메소드를 만들었다. 롬복을 사용하면 @Getter 을 사용하면 된다.

getLabel() 메소드를 통해 아래와 같이 값을 받을 수 있다.

public class test {
    public static void main(String[] args) throws IOException {
        Day[] values = Day.values();

        for (Day value : values) {
            System.out.println("value = " + value.getLabel());
        }
    }
}
value = 월요일
value = 화요일
value = 수요일
value = 목요일
value = 금요일
value = 토요일
value = 일요일

참고

금광캐는광부님

0개의 댓글