열거형이란?
- 서로 관련된 상수를 편히라게 선언하기 위한 것으로 여러 상수를 정의할 때 사용하면 유용
class Card{
static final int CLOVER = 0;
static final int HEART = 1;
static final int DIAMOND = 2;
static final int SPACE = 3;
static final int TWO = 0;
static final int THREE = 1;
static final int FOUR = 2;
final int kind;
final int num;
}
class Card{
enum Kind { CLOVER, HEART, DIAMOND, SPACE}
enum Vaule { TWO, THREE, FOUR}
final Kind kind;
final Value num;
}
if(Card.CLOVER == Card.TWO) // 의미가 안맞음 c언어에서는 타입이 달라도 값이 같으면 참이다.
if(Card.Kind.CLOVER == Card.Value.TWO) // 자바에선 컴파일 에러, 값은 같지만 타입이 다르기 때문
- 위의 예시처럼 값뿐만 아니라 타입도 체크하기 때문에 타입에 안전하다.
- 상수의 값이 바뀌면 해당 상수를 참조하는 모든 소스를 다시 컴파일 해야한다.
- 하지만 열거형 상수를 사용하면, 기존의 소스를 다시 컴파일 하지 않아도 된다.
- 열거형 상수간의 비교에는 '=='을 사용할 수 있다.
- equals()를 사용하지 않아도 되서 빠른 성능을 제공한다.
- 열거형 상수간의 비교에는 비교연산자 사용불가
열거형에 멤버 추가하기
- 열거형 상수 값이 불연속적인 경우에는 열거형 상수의 이름 옆에 원하는 값을 괄호와 함께 적어주면 된다.
- 지정된 값을 저장할 수 있는 인스턴스 변수와 생성자를 새로 추가해 주어야 한다.
enum Direction {
EAST(1, ">"), SOUTH(5, "V"), WEST(-1, "<"), NORTH(10, "^");
private final int value; // 정수 저장할 필드 추가
private final String symbol;
Direction(int value, String symbol) {
this.value = value;
this.symbol = symbol; } //생성자 추가
}