자바의 정석 - 열거형(Enums)

자바의 정석(남궁성 저) 학습내용 정리

1. 열거형(Enums)

Java의 열거형은 C언어의 열거형과 다르게 열거형이 갖는 값 뿐만 아니라 타입까지 관리한다.
기존의 상수의 값이 바뀌면, 해당 상수를 참조하는 모든 소스를 다시 컴파일 해야한다. 하지만 열거형 상수를 사용하면 기존의 소스를 다시 컴파일하지 않아도 된다.

1.1. 사용방법

enum 열거형이름 { 상수명1, 상수명2, ...}
  • 열거형 상수 간의 비교에는 ==을 사용할 수 있다. equals()가 아닌 ==으로 비교가능한 것은 그만큼 빠르다는 것이다.
  • 하지만 비교연산자(<, >)는 사용할 수 없고 compareTo()는 사용 가능하다.
  • switch문의 조건식에 열거형 사용하기
  void move() {
    switch(dir) {
        case EAST: x++; //Direction.EAST라고 쓰면 안된다.(열거형 이름 없이 상수 이름만 적어야 한다.)
          break;
        case WEST: x--;
          break;
        case SOUTH: y++;
          break;
        case NORTH: y--;
          break;
    }
  }

1.2. 열거형의 이해

enum Direction { EAST, WEST, SOUTH, NORTH }
  • 열거형 상수 하나하나가 Direction 객체이다.

위의 문장을 클래스로 정의하면,

class Direction {
  static final Direction EAST = new Direction("EAST");
  static final Direction WEST = new Direction("WEST");
  static final Direction SOUTH = new Direction("SOUTH");
  static final Direction NORTH = new Direction("NORTH");
  
  private String name;
  
  private Direction(String name)  {
    this.name = name;
  }
}
  • Direction클래스의 static상수 EAST, WEST, SOUTH, NORTH의 값은 객체의 주소이고, 이 값은 바뀌지 않는 값이므로 ==로 비교가 가능한 것이다.

*추가학습