english
Last Modified 2019.3.4

enum

enum 타입은 자바 5에 도입되었다.

  • 허용 가능한 값을 제한한다.
  • 값을 추가해도 수정해야 할 코드의 양이 최소화할 수 있다.
  • 자바 enum은 클래스다.

enum 타입은 상수 집합 정의를 위한 특별한 데이터 타입이다.
enum 선언은 클래스를 정의한다.
enum 클래스 바디는 메소드와 필드를 포함할 수 있다.
컴파일러는 enum을 생성할 때 자동으로 values() 정적 메소드를 추가한다.
values() 정적 메소드는 enum의 모든 값을 순서대로 저장한 배열을 반환한다.

package net.java_school.examples;

public enum Day {

    SUNDAY,
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY

}
package net.java_school.examples;

public class EnumTest {
    Day day;

    public EnumTest(Day day) {
        this.day = day;
    }

    public void tellItLikeItIs() {
        switch (day) {
        case MONDAY:
            System.out.println("Mondays are bad.");
            break;

        case FRIDAY:
            System.out.println("Fridays are better.");
            break;

        case SATURDAY: case SUNDAY:
            System.out.println("Weekends are best.");
            break;

        default:
            System.out.println("Midweek days are so-so.");
            break;
        }
    }

    public static void main(String[] args) {
        EnumTest firstDay = new EnumTest(Day.MONDAY);
        firstDay.tellItLikeItIs();
        EnumTest thirdDay = new EnumTest(Day.WEDNESDAY);
        thirdDay.tellItLikeItIs();
        EnumTest fifthDay = new EnumTest(Day.FRIDAY);
        fifthDay.tellItLikeItIs();
        EnumTest sixthDay = new EnumTest(Day.SATURDAY);
        sixthDay.tellItLikeItIs();
        EnumTest seventhDay = new EnumTest(Day.SUNDAY);
        seventhDay.tellItLikeItIs();

        for (Day day : Day.values()) {
            System.out.println(day);
        }
    }

}
Mondays are bad.
Midweek days are so-so.
Fridays are better.
Weekends are best.
Weekends are best.
SUNDAY
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY

값을 가진 enum 상수를 선언하는 방법은 다음과 같다.

  • 상수 선언 마지막에 ; 추가
  • package-private나 private로 생성자 추가
  • 값을 얻기 위한 메소드 추가
package net.java_school.examples;

public enum Day {

    SUNDAY("Sun"), //"Sun"이란 값을 생성자에 전달
    MONDAY("Mon"), 
    TUESDAY("Tue"),
    WEDNESDAY("Wed"), 
    THURSDAY("Thu"), 
    FRIDAY("Fri"),
    SATURDAY("Sat"); //마지막에 ; 추가
    
    private final String value;

    //생성자 추가
    private Day(String value) {
        this.value = value;
    }

    //값을 얻기 위한 메소드 추가
    public String getValue() {
        return value;
    }
}

enum 상수와 연결된 값은 자바 데이터 타입 중 하나다.
메인 메소드 마지막에 다음을 추가하여 예제를 테스트한다.

System.out.println(Day.MONDAY);
System.out.println(Day.MONDAY.getValue());

for (Day day : Day.values()) {
    System.out.println(day.getValue());
}
Sun
Mon
Tue
Wed
Thu
Fri
Sat

최종 소스 : https://github.com/kimjonghoon/enum

실행 방법

~/enum$ cd src/net/java_school/examples/
~/enum/src/net/java_school/examples$ javac -d ../../../../bin *.java
~/enum/src/net/java_school/examples$ cd -
~/enum$ java -cp ./bin net.java_school.examples.EnumTest
1.
Mondays are bad.
Midweek days are so-so.
Fridays are better.
Weekends are best.
Weekends are best.

2.
SUNDAY
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY

3.
Sun
Mon
Tue
Wed
Thu
Fri
Sat
참고