ordinary
[effective_java] item38 본문
item38: 확장할수 있는 열거타입이 필요하면 인터페이스를 사용하라.
일반적으로 열거타입을 확장하는 아이디어는 이상하게 여겨진다.
- 기반 타입의 원소가 뭐지? 문맥상 확장 전 원소라고 생각하겠다.
- 확장을 하면 확장한 모든 원소를 순회할 경우 등의 설계와 구현이 어려워질 수 있다.
그러나 열거타입이 어울리는 쓰임이 하나 있다.
>> 그것은 연산코드(Operation Code)
- 인터페이스
public interface Operation {
double apply(double x, double y);
}
- 확장한 이넘코드1
public enum BasicOperation implements Operation{
PLUS("+") {
@Override
public double apply ( double x, double y){
return x+y;
}
},
MINUS("-") {
@Override
public double apply(double x, double y) {
return x-y;
}
},
TIMES("*") {
@Override
public double apply(double x, double y) {
return x*y;
}
},
DIVIDE("/") {
@Override
public double apply(double x, double y) {
return x/y;
}
};
private final String symbol;
BasicOperation(String symbol) {
this.symbol = symbol;
}
@Override
public String toString() {
return symbol;
}
}
- 확장한 이넘코드2
public enum ExtendedOperation implements Operation{
EXP("^") {
@Override
public double apply(double x, double y) {
return Math.pow(x, y);
}
},
REMAINDER("%") {
@Override
public double apply(double x, double y) {
return x % y;
}
};
private final String symbol;
ExtendedOperation(String symbol) {
this.symbol = symbol;
}
@Override
public String toString() {
return symbol;
}
}