하나의 클래스가 두 가지 이상의 기능을 가지고 있으며, 그 중 어떤 기능을 제공하는지 표시는 태그가 달린 클래스를 만날 때가 있다. 

위의 클래스에는 다양한 문제점이 있다. enum 선언, 태그 필드 , switch문 등의 상투적인 코드가 반복되며, 서로 다른 기능을 위한 코드가 한 클래스에 모여있으니 가독성도 떨어진다. 객체를 만들때마다 필요없는 필드도 함께 생성되므로 메모리도 낭비다. 즉 태그 기반 클래스는 너저분하고 오류 발생 가능성이 높고 효율적이지 않다. 이러한 클래스는 계승을 이용하여 리팩토링 해야한다.


 먼저 태그 값에 따라 달리 동작하는 메서드를 추상 메서드로 선언하는 추상 클래스를 정의한다. 그 추상 클래스를 클래스 계층 맨 위에 둔다. 그리고 태그 값에 좌우되지 않는 메서드, 데이터 필드를 모두 그 추상클래스에 둔다. 그 다음으로 태그 기반 클래스가 제공하던 각각의 기능을 방금 만든 최상의 클래스의 객체 생성 가능 하위 클래스로 정의하는 것이다.


+ Recent posts