Enum 열거형
class Card {
static final int SPADE = 0;
static final int HEART = 1;
static final int DIAMOND = 2;
static final int CLOVER = 3;
static final int TWO = 0;
static final int THREE = 1;
final int kind;
final int num;
}
class Card {
enum Kind { SPADE, HEART, DIAMOND, CLOVER }
enum Value { TWO, THREE }
final Kind kind;
final Value value;
- 관련된 상수들을 같이 묶어 놓은 것, Java는 타입에 안전한 열거형을 제공
if(Card.Kind.SPADE==Card.Value.TWO) {
열거형의 정의와 사용
enum 열거형이름 { 상수명1, 상수명2, ... }
enum Direction { EAST, SOUTH, WEST, NORTH }
class Unit {
Direction dir;
void init() {
dir = Direction.EAST;
}
}
if(dir==Direction.EAST) {
x++;
} else if (dir > Direction.WEST) {
...
} else if (dir.compareTo(Direction.WEST) > 0) {
- 열거형 상수의 동등 비교에
==
와 compareTo()
사용 가능
- 비교 연산자 사용시
compareTo()
사용
compareTo()
- (뺄셈이라고 생각하기)
- 왼쪽이 크면 - 양수
- 같으면 - 0
- 오른쪽이 크면 - 음수
열거형의 조상 java.lang.Enum class
- 모든 열거형은 Enum의 자손
- 모든 열거형은 Enum class의 메서드들을 상속 받는다.
메서드 | 설명 |
---|
Class getDeclaringClass() | 열거형의 Class 객체를 반환 |
String name() | 열거형 상수의 이름을 문자열로 반환 |
int ordinal() | 열거형 상수가 정의된 수서를 반환 (0부터 시작) |
T valueOf(Class enumType, String name) | 지정된 열거형에서 name 과 일치하는 열거형 상수를 반환 |
values()
, valueOf()
는 컴파일러가 자동 추가
Direction[] dArr = Direction.values();
for(Direction d : dArr)
System.out.println("이름 : " + d.name() + ", 순서 : " + d.ordinal());
Direction d = Direction.valueOf("WEST");
Direction.WEST;
열거형에 멤버 추가
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; }
}
- 괄호
()
를 사용하려면, 인스턴스 변수와 생성자를 새로 추가한다.
- 열거형 생성자는 묵시적으로
private
이므로, 외부에서 객체 생성 불가