스터디/이펙티브 자바
[Effective Java] Item38. 확장가능한 열거 타입이 필요하면 인터페이스
niniz
2022. 6. 26. 11:22
열거 타입과 확장
열거 타입은 거의 모든 상황에서 타입 안전 열거 패턴보다 우수하지만 확장하는 것은 좋지 않음
- 확장 타입의 원소는 기반 타입의 원소로 취급하지만 그 반대는 성립하지 않음
- 기반 타입과 확장 타입의 원소 모두 순회할 방법도 마땅치 않음
- 확장성을 높이려면 고려할 요소가 늘어남
확장 가능한 열거 타입
public interface Operation {
double apply(double x, double y);
}
public enum BasicOperation implements Operation {
PLUS("+") { public double apply(double x, double y) { return x + y; } },
MINUS("-") { public double apply(double x, double y) { return x - y; } },
TIMES("*") { public double apply(double x, double y) { return x * y; } },
DIVIDE("/") { 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; }
}
``
``` java
public enum ExtendedOperation implements Operation {
EXP("^") { public double apply(double x, double y) { return Math.pow(x, y); } },
REMAINDER("%") { 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; }
}
열거 타입은 인터페이스를 구현할 수 있으므로 인터페이스를 구현한 Enum
을 두 개 만들어 사용
확장 가능한 열거 타입의 문제
- 열거 타입끼리 구현을 상속할 수 없음
- 디폴트 구현을 이용해 인터페이스에 추가하는 방법은 사용 불가
- 연산 기호를 저장하고 찾는 로직이
BasicOperation
,ExtendedOperation
모두에 들어감
반응형