Search

Item 38. 확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라

생성일
2023/07/27 00:29
챕터
6장 - 열거 타입과 애너테이션

확장할 수 있는 열거 타입

열거 타입은 기본적으로 열거한 값들을 그대로 가져온 다음 값을 더 추가하여 사용하는 목적으로 확장할 수 없다. 그 이유는 다음과 같다.
확장한 타입의 원소는 기반 타입의 원소로 취급하지만, 확장하지 않은 타입의 원소는 그렇지 않다면 문제가 되기 때문이다.
확장한 타입의 원소 모두를 순회할 방법이 마땅치 않다.
확장성을 높이려면 고려할 요소가 늘어나 설계와 구현이 더 복잡해진다.
연산 코드(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
복사