반응형
[Effective Java] 태그(tagged) 클래스보다는 클래스 계층을 사용하자. |
인스턴스들이 두 개 이상의 특성으로 분류되고 그런 특성을 나타내는 태그(tag) 필드를 갖는 클래스들을 태그 클래스라고 한다.
예를 들어 Figure 라는 class 가 있는데, 생성자의 종류에 따라 Rectangle 도 되었다가 Circle 도 될 수 있는 녀석.
한 Class 가 조건에 따라 많이 다른 특성의 class 의 형태로 변하는 녀석을 말한다.
-
태그 클래스(Tagged class) 는 단점 투성이다.
enum 선언, 태그 필드, switch, if 문 등을 포함해서 각종 복잡한 코드로 가독성을 떨어뜨린다.
다른 종류의 인스턴스에 속하는 부적절한 필드를 인스턴스가 가지고 있어 필요 없는 메모리 할당과 해지가 증가한다.
여러 생성자가 부적절한 필드를 초기화하므로 필드를 final 로 만들기도 어렵다.
-
태그 클래스는 코드가 "쓸데없이" 장황하고, 에러가 나기 쉬우며, 비효율적이다.
태그 클래스를 가용할 것이라면, 차라리 서브 타입을 만드는 것이 좋다. ( 클래스 계층 )
-
클래스 계층의 장점은 타입들간의 자연적인 계층 관계를 반영할 수 있다.
유연성이 증가되고 컴파일 시점의 타입 검사도 더 쉽다.
Summary
태그 클래스는 적합하지 않다.
만일 태그를 갖는 클래스를 작성하고 싶다면, 태그를 없앨 수 있는지, 그리고 태그 클래스를 클래스 계층으로 교체할 수 있는지를 심사숙고하자.
태크 필드를 갖는 기존 클래스를 발견하면, 클래스 게층 형태로 재구성을 고려하자.
반응형
'프로그래밍 놀이터 > 디자인 패턴, 리펙토링' 카테고리의 다른 글
[Effective Java] static 맴버 클래스를 많이 사용하자. (0) | 2016.11.17 |
---|---|
[Effective Java] 전략을 표현할 때 함수 객체를 사용하자. (0) | 2016.11.15 |
[Effective Java] 타입을 정의할 때만 인터페이스를 사용하자. (0) | 2016.11.08 |
[Effective Java] 추상 클래스보다는 인터페이스를 사용하자. (0) | 2016.11.07 |
[Effective Java] 상속을 위한 설계와 문서화를 하자. 그렇지 않다면 상속의 사용을 금지시킨다. (0) | 2016.11.01 |
댓글