태그 달린 클래스보다는 계층 구조 활용하기

태그 값으로 두 가지 역할을 하는 클래스를 본 적 있을 것이다. 이런 클래스는 여러 구현이 혼합되어 가독성이 떨어진다. 또한 final을 필드에 선언했다면 쓰지 않더라도 생성자 초기화를 진행해야 한다. 거기다 새로운 구현을 추가한다면? switch-case도 늘려야한다. 이와 같이 태그 달린 클래스는 장황하고, 오류를 내기 쉽고, 비효율적이다. 이는 계층 구조를 어설프게 흉내낸 것이다.

차라리 abstract class를 두고 태그 마다 새로운 클래스를 확장하는게 더 나은 선택지가 될 수 있다. 그러면 case도 추가하지 않아도 되고, 루트 클래스를 직접 건들 필요도 없으며, 확장의 유연성 또한 증가한다.