태그 달린 클래스보다는 클래스 계층구조를 활용
태그 달린 클래스
예시 - 다양한 도형을 표현할 수 있는 Figure 클래스
class Figure {
enum Shape { RECTANGLE, CIRCLE };
final Shape shape; // 태그 필드
// shape가 사각형일 때를 위한 필드
double length;
double width;
// shape가 원일 때를 위한 필드
double radius;
Figure(double length, double width) {
shape = Shape.RECTANGLE;
this.length = length;
this.width = width;
}
Figure(double radius) {
shape = Shape.CIRCLE;
this.radius = radius;
}
double area() {
return switch (shape) {
case RECTANGLE -> length * width;
case CIRCLE -> Math.PI * radius * radius;
};
}
}태그 달린 클래스의 문제점
태그 달린 클래스 대신 클래스 계층구조를 활용
예시 - 위의 Figure 클래스를 클래스 계층구조로 변환
Last updated