열거형

열거형은 여러 상수를 선언해야 할 때 쓰는 방법이다. 열거형에는 따로 값을 지정해주지 않아도 자동적으로 0부터 시작하는 정수값이 할당된다. 이 정수값으로 같은 열거형끼리의 값 비교가 가능하다. 열거형 상수간의 비교에는 '=='를 사용할 수 있지만 '<'나 '<'와 같은 비교연산자는 사용할 수 없고(열거형 상수는 객체라서) 대신 compareTo() 메소드 사용이 가능하다. 왼쪽 상수의 정수값 - 오른쪽 상수의 정수값을 반환하게 된다(같으면 0, 왼쪽이 크면 양수, 오른쪽이 크면 음수).

열거형 상수의 값이 불규칙적인 경우에는 열거형 상수의 이름 옆에 원하는 값을 괄호와 함께 적어주면 된다. 그리고 지정된 값을 저장할 수 있는 인스턴스 변수와 생성자를 새로 추가해 주어야 한다. 열거형 상수의 값을 저장하기 위한 변수는 final을 붙인다.

enum Direction{
  EAST(1), SOUTH(5), WEST(2), NORTH(20); // 괄호부분이 생성자 호출이다.
  
  private final int value;
  
  Direction(int value) { // 열거형의 생성자는 외부에서 호출이 불가능하다. 제어자가 묵시적으로 항!상! private이기 때문. 따라서 private Direction(int value)와 동일.
    this.value = value;
  }
  
  public int getValue() { return value; }
}