- 관련된 상수들을 같이 묶어 놓은 것
- java는 타입에 안전한 열거형을 제공(값&타입 체크)
class Card{ enum Kind {CLOVER, HEART, DIAMOND, SPADE} // 열거형 Kind를 정의 enum Value {TWO, THREE, FOUR} // 열거형 Value를 정의 . final Kind kind; // 타입이 int가 아닌 Kind임에 유의 final Value value; }
- 열거형을 정의하는 방법
enum 열거형이름{ 상수명1, 상수명2, ...}enum Direction {EAST, SOUTH, WEST, NORTH}
- 열거형 타입의 변수를 선언하고 사용하는 방법
class Unit{ int x, y; // 유닛의 위치 Direction dir; // 열거형 인스턴스 변수를 선언 . void init(){ dir = Direction.EAST; // 유닛의 방향을 EAST로 초기화 } }
- 열거형 상수의 비교에 == 와 compareTo() 사용가능
if(dir==Direction.EAST){ // true x++; }else if(dir > Direction.WEST){ // 에러. 열거형 상수에 비교연산자 사용불가 ... }else if(dir.compareTo(Direction.WEST) > 0 { // compareTo()는 가능
- 모든 열거형은 Enum의 자손이며, 아래의 메서드를 상속받음
-> String name() : 열거형 상수의 이름을 문자열로 반환
-> int ordinal() : 열거형 상수가 정의된 순서를 반환(0부터 시작)
-> T valueOf(Class<T>
enumType, String name) :
지정된 열거형에서 name과 일치하는 열거형 상수를 반환- values(), valueOf()는 컴파일러가 자동으로 추가
- 불연속적인 열거형 상수의 경우, 원하는 값을 괄호() 안에 적는다.(여러개 가능)
enum Direction{EAST(1), SOUTH(5), WEST(-1), NORTH(10)}
- 괄호()를 사용하려면, 인스턴스 변수와 생성자를 새로 추가해 줘야 한다.
enum Direction{ EAST(1), SOUTH(5), WEST(-1), NORTH(10); // 끝에 ;를 추가 private final int value; // 정수를 저장할 필드(인스턴스 변수)를 추가 Direction (int value) {this.value = value;} // 생성자를 추가 . public int getValue() {return value;} }
- 열거형의 생성자는 묵시적으로 private이므로, 외부에서 객체생성 불가
Direction d = new Direction(1); // 에러. 열거형의 생성자는 외부에서 호출불가
👶 출처
자바의 정석 책 & 유튜브