ITEM 23: 태그 달린 클래스보다 클래스 계층구조를 활용해라
태그 달린 클래스 문제점
class Figure {
enum Shape { RECTANGLE, CIRCLE };
// 태그 필드
final Shape shape;
// shape가 RECTANGLE일때만 사용
double length;
double width;
// shape이 CIRCLE 일때만 사용
double radius;
// 원용 생성자
Figure(double radius){
shape = Shape.CIRCLE;
this.radius = radius;
}
// 사각형용 생성자
Figure(double length, double width){
shape = Shape.RECTANGLE;
this.length = length;
this.width = width;
}
double area() {
switch(shape){
case RECTANGLE:
return length * width;
case CIRCLE:
return Math.PI * (radius * radius);
default:
throw new AssertionError(shape);
}
}
}클래스 계층구조
Last updated