아이템 23 - 태그 달린 클래스보다는 클래스 계층 구조를 활용하라.
JAVA ·태그달린 클래스란?
- 두 가지 이상의 의미를 표현할 수 있으며, 그중 현재 표현하는 의미를 태그 값으로 알려주는 클래스
- eg)
class Figure { enum Shpe {RECTANGLE, CIRCLE}; //태그 필드 final Shape shape; //다음 필드들은 사각형일 때만 사용 double length; double width; //다음 필드는 원일 때만 사용 dobule radius; ... }
태그 달린 클래스의 단점
- 열거 타입 선언, 태그 필드, switch문 등 쓸데 없는 코드가 많다.
- 여러 구현이 한 클래스에 혼합돼 있어서 가독성이 나쁘다.
- 다른 의미를 위한 코드도 언제나 함께 하니 메모리도 많이 사용한다.
- 필드를 final로 선언하려면 불필요한 필드까지 생성자에서 초기화해야 한다.
- 쓰지 않는 필드를 초기화하는 불필요한 코드가 늘어난다.
- 인스턴스 타입만으로는 현재 나타내는 의미를 알 길이 없다.
결론
- 태그달린 클래스는 장황하고, 오류를 내기 쉽고, 비효율적이다.
- 태그 달린 클래스는 클래스 계층구조를 어설프게 흉내낸 아류일 뿐이다.
- 클래스 계층 구조로 바꾸면(상속을 이용하면) 모든 단점을 해결할 수 있다.