JAVA/자바의 정석

[자바의 정석 - 기초편] 12. (3) 열거형 enum ( 조상 / 멤버 추가 )

서영22 2023. 12. 14. 03:55

 열거형 (enum) 

관련된 상수들을 같이 묶어 놓은 것. Java는 타입에 안전한 열거형을 제공

 

 

 

열거형 정의

enum 열거형이름 { 상수명1, 상수명2, ... }

 

 

열거형 변수 선언과 사용

class Unit {
       int x, y;   // 유닛의 위치
       Direction dir;   // 열거형 인스턴스 변수를 선언
     
       void init() {
              dir = Direction.EAST;   // 유닛의 방향을 EAST로 초기화
       }
}

 

 

열거형 상수의 비교에 == 와 compareTo() 사용

if(dir == Direction.EAST) {
       x++;
} else if (dir > Direction.WEST) {  // 에러. 열거형 상수에 비교 연산자 사용불가
     ...
} else if (dir.compareTo(Direction.WEST) > 0) {  // 같으면 0, 오른쪽이 크면 음수, 작으면 양수
     ...

}

 

 

 

 열거형의 조상 - java.lang.Enum 

 

- 모든 열거형은 Enum의 자손이며 아래 메서드를 상속 받음

 

 

- values(), valueOf()는 컴파일러가 자동으로 추가

static E[ ] values()
static E valueOf(String name)

 

 

 

< 예제 >

 

 

 

 

 열거형에 멤버 추가하기 

- 불연속적인 열거형 상수의 경우, 원하는 값을 괄호 안에 적음

enum Direction { EAST(1), SOUTH(5), WEST(-1), NORTH(10) }

 

 

- 괄호를 사용하려면 인스턴스 변수와 생성자를 추가해줘야 함

enum Direction {
       EAST(1), SOUTH(5), WEST(-1), NORTH(10);  // 끝에 ';'를 추가해야 함
  
       private final int value;  // 정수를 저장할 필드(인스턴스 변수)를 추가
       (private) Direction(int value) { this.value = value; }  // 생성자 추가 (생성자는 항상 private임 - 생략가능)

       public getValue() { return value; }
}

 

 

- 열거형의 생성자는 묵시적으로 private이므로 외부에서 객체 생성 불가

Direction d = new Direction(1);  // 에러. 열거형의 생성자는 외부에서 호출 불가

 

 

 

< 예제 >