열거형 (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); // 에러. 열거형의 생성자는 외부에서 호출 불가
< 예제 >