아래와 같은 enum 자료형이 있다
두 개의 enum 상수가 있다.
멤버 변수 symbol 을 하나 갖고, 추상 메소드도 하나 선언되어있다
enum MyEnum {
PLUS("+") {double apply(double x, double y){return x+y;}},
MINUS("-") {double apply(double x, double y){return x-y;}};
private final String symbol; // 불변
MyEnum(String symbol){
this.symbol = symbol;
}
// 추상 메소드
abstract double apply(double x, double y);
}
위 enum 자료형을 일반 클래스로 흉내내 보자
열거형의 각 상수는
public static final 로 선언된 열거형 클래스의 하위 클래스(익명클래스) 객체로 이해된다abstract class MySimilarEnum implements Comparable<MySimilarEnum>, Serializable {
public static final MySimilarEnum PLUS = new MySimilarEnum("+") {
@Override
double apply(double x, double y){return x+y;}
@Override
public String toString() {return "PLUS";
}
}; // (MySimilarEnum의 하위) 익명 클래스 객체
public static final MySimilarEnum MINUS = new MySimilarEnum("-") {
@Override
double apply(double x, double y){return x-y;}
@Override
public String toString() {return "MINUS";
}
}; // (MySimilarEnum의 하위) 익명 클래스 객체
private final String symbol; // 불변
MySimilarEnum(String symbol){
this.symbol = symbol;
}
@Override
public int compareTo(MySimilarEnum o) {
return 0;
}
@Override
public String toString() {
return symbol;
}
// 추상 메소드
abstract double apply(double x, double y);
}
- 참고 : Effective Java 2판, 규칙 30. enum을 사용하라
'아는 만큼 보인다 > Tip' 카테고리의 다른 글
Java HotSpot VM Options 몇 가지 (0) | 2014.12.18 |
---|---|
Java 메모리 누수(memory leak) (0) | 2014.12.16 |
Java Memory Model (0) | 2014.11.20 |
문자열 속 일부 유니코드 치환 (0) | 2014.10.07 |
eclipse에서 java compiler 변경시.. 에러 (0) | 2013.01.08 |