Enum
values() 모든 enum 상수를 배열로 반환valueOf(String name) 문자열에 해당하는 enum 상수 반환name() enum 상수의 이름(String) 반환ordinal() 선언된 순서(0부터 시작) 반환equals(Object o) 같은 enum인지 여부 반환 compareTo(Enum e) ordinal 값의 차이 반환toString() 문자열로 반환(오버라이드 가능)getDeclaringClass() enum 클래스 반환public enum Day {
MONDAY(0, "월"), TUESDAY(1, "화"), WEDNESDAY(2, "수"),
THURSDAY(3, "목"), FRIDAY(4, "금"), SATURDAY(5, "토"), SUNDAY(6, "일");
private final int value;
private final String korean;
Day(int value, String korean) {
this.value = value;
this.korean = korean;
}
public int getValue() { return value; }
public String getKorean() { return korean; }
public int dayBetween(Day other) {
return Math.abs(this.value - other.value);
}
}
public enum Operation {
PLUS, MINUS, MULTIPLY, DIVIDE;
double apply(double x, double y) {
switch (this) {
case PLUS: return x + y;
case MINUS: return x - y;
case MULTIPLY: return x * y;
case DIVIDE: return x / y;
default: throw new AssertionError("Unknown operation: " : this);
}
}
}
}
double x = 2.0;
double y = 4.0;
for (Operation op : Operation.values()) {
System.out.printf("%f %s %f = "%f%n", x, op, y, op.apply(x, y));
}
열거형에서는 추상 메소드 선언이 가능하며 각 상수는 추상 메소드를 상속받아 개별적으로 오버라이딩해야 합니다.
public enum Operation2 {
PLUS("+") {
@Override
double apply(double x, double y) { return x + y; }
},
MINUS("-") {
@Override
double apply(double x, double y) { return x - y; },
MULTIPLY("*") {
@Override
double apply(double x, double y) { return x * y; },
DIVIDE("/") {
@Override
double apply(double x, double y) { return x / y; }
};
private final String symbol;
Opreation2(String symbol) { this.symbol = symbol; }
@Override
public String toString() { return symbol; }
abstract double apply(double x, double y);
}