확장할 수 있는 열거 타입
•
열거 타입은 기본적으로 열거한 값들을 그대로 가져온 다음 값을 더 추가하여 사용하는 목적으로 확장할 수 없다. 그 이유는 다음과 같다.
◦
확장한 타입의 원소는 기반 타입의 원소로 취급하지만, 확장하지 않은 타입의 원소는 그렇지 않다면 문제가 되기 때문이다.
◦
확장한 타입의 원소 모두를 순회할 방법이 마땅치 않다.
◦
확장성을 높이려면 고려할 요소가 늘어나 설계와 구현이 더 복잡해진다.
•
연산 코드(operation code 혹은 opcode)에서는 각 원소가 특정 기계가 수행하는 연산을 의미하는데, 가끔 기본 연산 외에 사용자 확장 연산을 추가할 수 있게 열어주어야 할 때가 있다.
•
열거 타입이 임의의 인터페이스를 구현할 수 있다는 점을 이용하여, 연산 코드용 인터페이스를 정의하고 열거 타입이 해당 인터페이스를 구현하게 하여 열거 타입이 확장 효과를 가지게 할 수 있다.
public interface Opreation {
double apply(double x, double y);
}
public enum basicOperation implements Operation {
PLUS("+") { (x, y) -> x + y; }
MINUS("-") { (x, y) -> x - y; }
TIMES("*") { (x, y) -> x * y; }
DIVIDE("/") { (x, y) -> x / y; }
private final String symbol;
BasicOperation(String symbol) {
this.symbol = symbol;
}
}
Java
복사