• enum은 관련된 상수들을 하나의 객체로 만든 것이다
  • 열거 타입 자체가 클래스이며, 상수 하나당 자신의 인스턴스를 만들어 public static final 필드로 공개한다
  • 열거 타입은 밖에서 접근할 수 있는 생성자를 제공하지 않으므로 사실상 final 이다. 따라서, 열거 타입 선언으로 만들어진 인스턴스는 딱 하나씩만 존재하게 된다 싱글톤
  • 모든 열거형의 조상은 Enum 클래스
  • enum도 클래스 이기 때문에 필드와 메서드를 추가할 수 있다
public enum Direction { 
    EAST(1), 
    WEST(2), 
    SOUTH(-10), 
    NORTH(5); 

    private final int num;

    Dircetion(int num) {
        this.num = num;
    }
}

Direction dir = Direction.EAST;
Direction dir = Direction.valueOf("EAST");
  • compareTo()
    • 열거형 상수의 비교에 == 와 compareTo() 모두 사용 가능. 
    • compareTo()는 ordinal()로 계산함.
    • 비교연산자 <, > 는 사용 불가
Direction d1 = Direction.EAST;          // ordinal() : 0
Direction d2 = Direction.SOUTH;         // ordinal() : 2
int result1 = d1.compareTo(d2);         // 0-2 = -2
int result2 = d2.compareTo(d1);         // 2-0 = 2