반응형
열거형(Enumeration)
- 관련된 상수들을 같이 묶어 놓은 것
- Java 는 타입에 안전한 열거형을 제공
class Menu {
enum CoffeeMenu { ESPRESSO, AMERICANO, LATTE }
enum TeaMenu { GREEN_TEA, YUTU_TEA }
CoffeeMenu coffeeMenu;
TeaMenu teaMenu;
}
안전한 열거형이란 무슨 의미일까?
예를 들어 아래처럼 열거형을 사용하지 않고 상수로 관리한다고 생각해보자.
class Menu {
static int ESPRESSO = 0;
static int AMERICANO = 1;
static int LATTE = 2;
static int GREEN_TEA = 0;
static int YUJU_TEA = 1;
}
if (Menu.ESPRESSO == Menu.GREEN_TEA) // true 가 되어버림.. 실수하면 로직 버그 가능
하지만 열거형에서는 이런 실수를 방지할 수 있다.
정의 및 사용
enum Direction { EAST, SOUTH, WEST, NORTH }
class Unit {
int x, y;
Direction direction;
void init() {
direction = Direction.EAST;
}
}
- 열거형 상수 비교에 == 과 compareTo() 사용 가능
if (direction == Direction.EAST) {
...
} else if (direction > Direction.WEST) { // 이건 안됨.
...
} else if (direction.compareTo(Direction.WEST) > 0) { // 이건 가능.
...
}
열거형의 조상 java.lang.Enum
- 모든 열거형은 Enum 의 자손이고, 아래 메소드를 상속받음
Class<E> getDeclaringClass() // 열거형의 Class 객체를 반환
String name() // 열거형 상수의 이름을 문자열로 반환
int ordinal() // 열거형 상수가 정의된 순서를 반환 (0부터 시작)
T valueOf(Class<T> enumType, String name) // 지정된 열거형에서 name 과 일치하는 열거형 상수 반환
// 컴파일러가 자동 추가해주는 메소드
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;
Direction(int value) { this.value = value; } // 열거형 생성자는 묵시적 private
public int getValue() { return value; }
}
728x90
반응형