Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

ordinary

[effective_java] item38 본문

카테고리 없음

[effective_java] item38

extra_ 2023. 2. 17. 15:18

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;
    }
    
}