[Tistory] 이펙티브 자바 Item 38 – 확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라

원글 페이지 : 바로가기

열거 타입은 보통은 확장에 적합하지 않다. 확장할 수 있는 열거타입이 필요할 떄도 있는데, 연산 코드가 그 예시이다. 사용자 확장 연산을 추가할 수 있도록 열어주는 것이다. 열거 타입이 임의의 인터페이스를 구현하여 확장하면 된다. 인터페이스를 이용해 확장 가능 열거 타입처럼 만들어보기 public interface Operation{
double apply(double x, double y);
}

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

} Operation은 확장 가능하고, Operation을 구현한 또 다른 열거 타입을 정의해서 대체할 수 있다. 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;

} 이제 interface형으로 이를 구현하는 여러 enum들에 접근할 수 있다. public static void main(String[] args) {
double x = 10;
double y = 2;

getEnumCollection(Arrays.asList(BasicOperation.values()), x, y);
getEnumCollection(Arrays.asList(ExtendedOperation.values()), x, y);

}

public static void test(Collection opSet, double x, double y) {
for (Operation op : opSet) {
System.out.printf(“%f %s %f = %f%n”, x, op, y, op.apply(x, y));
}
} 열거 타입은 확장할 수 없다. 단, 인터페이스를 통해 여러 열거 타입에 동일한 인터페이스를 구현하게 하면 마치 확장하는 것과 비슷한 효과를 낸다. 인터페이스로 작성되었다는 가정하에 서로 얼마든지 대체 가능하다 https://jake-seo-dev.tistory.com/58 이펙티브 자바, 쉽게 정리하기 – item 38. 확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용 이펙티브 자바, 쉽게 정리하기 – item 38. 확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라 열거 타입의 확장 기본적으로 열거 타입의 확장이 지원되지는 않는다. 그러나 가끔 필요할 jake-seo-dev.tistory.com https://velog.io/@injoon2019/%EC%9D%B4%ED%8E%99%ED%8B%B0%EB%B8%8C-%EC%9E%90%EB%B0%94-%EC%95%84%EC%9D%B4%ED%85%9C-38.-%ED%99%95%EC%9E%A5%ED%95%A0-%EC%88%98-%EC%9E%88%EB%8A%94-%EC%97%B4%EA%B1%B0-%ED%83%80%EC%9E%85%EC%9D%B4-%ED%95%84%EC%9A%94%ED%95%98%EB%A9%B4-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98 [이펙티브 자바] 아이템 38. 확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라 열거 타입은 보통은 확장에 적합하지 않다. 확장할 수 있는 열거타입이 필요할 때도 있는데 연산 코드가 그 예시다. 사용자 확장 연산을 추가할 수 있도록 열어주는 것이다. 열거 타입이 임의의 velog.io

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다