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

태그 달린 클래스의 단점

  • 열거 타입 선언, 태그 필드, switch 문 등 쓸데없는 코드가 많다.
  • 단일 책임 원칙 (Single responsibility principle)의 원칙에 어긋나 가독성도 나쁘고 메모리도 많이 사용한다.
  • switch문에 새로운 의미를 처리하는데 빼고 작성하면 런타임 시에나 문제를 발견한다.
  • 인스턴스 타입만으로 클래스의 목적을 알 수 없다.

태그 달린 클래스는 장황하고 , 오류를 내기 쉽고, 비효율적이다.

클래스 계층구조를 활용하는 서브타이핑은 타입 하나로 다양한 의미의 객체를 표현한다.

 

  1. 계층구조의 루트(root)가 될 추상 클래스를 정의
  2. 태그 값에 따라 동작이 달라지는 메서드를 루트 클래스의 추상 메서드로 선언
  3. 태그 값에 상관없이 동작이 일정한 메서드를 루트 클래스에 일반 메서드로 추가
  4. 모든 하위 클래스에서 공통으로 사용하는 데이터 필드도 전부 루트 클래스로 올림
  5. 루트 클래스를 확장한 구체 클래스를 의미별로 정의

각  의미를 독립된 클래스에 담아 관련 없던 데이터 필드를 모두 제거

 

반응형