-
열거형(enum)
- 관련된 상수들을 같이 묶어 놓은 것
예제
class Card{ enum Kind {CLOVER, HEART, DIAMOND, SPADE} enum Value {TWO, THREE, FOUR} final Kind kind; final Value value; }
위 예제는 열거형 상수로 Kind와 Value를 선언한 것이다.
열거형 상수는 값이 순차적으로 들어가며, Kind의 값은 CLOVER 0, HEART 1 등 순차적으로 값이 들어가진다.
열거형 상수 Value 역시 순차적으로 들어가지므로 TWO는 0, THREE는 1이다.
- Java는 타입에 완전한 열거형을 제공한다.
예제
if(Card.Kind.CLOVER == Card.Value.TWO) { }
자바는 값과 타입을 둘 다 비교하며, 타입이 다를 경우엔 비교할 수 없다.
위와 같이 작성한다면 컴파일 에러가 발생한다.
- 열거형 상수의 비교에 ==와 compareTo()를 사용할 수 있다.
열거형 상수에 비교연산자는 사용할 수 없다.
열거형을 정의하는 방법
enum 열거형이름 {상수명1, 상수명2, ...}
정의한 상수를 사용하기 위해선 '열거형이름.상수명'을 사용하면 된다.
클래스의 static 변수를 참조하는 것과 동일하다.
열거형의 조상 - java.lang.Enum (클래스)
- 모든 열거형은 Enum의 자손이며, 아래의 메서드를 상속받는다.
메서드 설명 Class<E> getDeclaringClass() 열거형의 Class 객체를 반환 String name() 열거형 상수의 이름을 문자열로 반환 int ordinal() 열거형 상수가 정의된 순서를 반환 (0부터 시작) T valueOf(Class<T> enumType, String name) 지정된 열거형에서 name과 일치하는 열거형 상수 반환 - values(), valueOf()는 컴파일러가 자동으로 추가해준다.