[Effective Java 3/e] 아이템 23 - 태그 달린 클래스보다는 클래스 계층구조를 활용하라


아이템 23 - 태그 달린 클래스보다는 클래스 계층구조를 활용하라

태그 달린 클래스의 단점

  • 장황하고, 오류를 내기 쉽고, 비효율적
  • 클래스 계층구조를 어설프게 흉내 낸 아류

태그 달린 클래스 - 클래스 계층구조보다 훨씬 나쁘다

class Figure {
  enum Shape { RECTANGLE, CIRCLE };

  //태그 필드 - 현재 모양을 나타냄
  final Shape shape;

  // 사각형 일 때만 쓰이는 필드
  double length;
  double width;

  // 원 일 때만 쓰이는 필드
  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;
  }
}

태그 달린 클래스를 클래스 계층구조로 변환

```java abstract class Figure { abstract double area(); }

class Circle extends Figure { final double radius;

Circle(double radius) { this.radius = radius; } }

class Rectangle extends Figure { final double length; final double width;

Rectangle(double length, double width) { this.length = length; this.width = width; } }