본문 바로가기
프로그래밍 놀이터/디자인 패턴, 리펙토링

[Effective Java] 태그(tagged) 클래스보다는 클래스 계층을 사용하자.

by 돼지왕 왕돼지 2016. 11. 14.
반응형

 [Effective Java] 태그(tagged) 클래스보다는 클래스 계층을 사용하자.


Circle, CLASS, Effective JAVA, enum, enum 선언, error-prone, Figure, Final, IF, Rectangle, Switch, tagged, tagged class, [Effective Java] 태그(tagged) 클래스보다는 클래스 계층을 사용하자., 가독성, 계층 관계, 단점, 단점 투성이, 두개 이상 특성, 메모리 할당, 복잡, 부적절한 필드, 비효율적, 생성자, 서브 타입, 쓸데없이, 에러나기 쉬움, 유연성, 인스턴스, 자연적인 계층 관계, 장황, 재구성, 조건, 컴파일, 클래스 계층, 타입 검사, 태그, 태그 클래스, 태그 필드, 해지


-
인스턴스들이 두 개 이상의 특성으로 분류되고 그런 특성을 나타내는 태그(tag) 필드를 갖는 클래스들을 태그 클래스라고 한다.
예를 들어 Figure 라는 class 가 있는데, 생성자의 종류에 따라 Rectangle 도 되었다가 Circle 도 될 수 있는 녀석.
한 Class 가 조건에 따라 많이 다른 특성의 class 의 형태로 변하는 녀석을 말한다.


-
태그 클래스(Tagged class) 는 단점 투성이다.
enum 선언, 태그 필드, switch, if 문 등을 포함해서 각종 복잡한 코드로 가독성을 떨어뜨린다.
다른 종류의 인스턴스에 속하는 부적절한 필드를 인스턴스가 가지고 있어 필요 없는 메모리 할당과 해지가 증가한다.
여러 생성자가 부적절한 필드를 초기화하므로 필드를 final 로 만들기도 어렵다.


-
태그 클래스는 코드가 "쓸데없이" 장황하고, 에러가 나기 쉬우며, 비효율적이다.
태그 클래스를 가용할 것이라면, 차라리 서브 타입을 만드는 것이 좋다. ( 클래스 계층 )


-
클래스 계층의 장점은 타입들간의 자연적인 계층 관계를 반영할 수 있다.
유연성이 증가되고 컴파일 시점의 타입 검사도 더 쉽다.



Summary


태그 클래스는 적합하지 않다.
만일 태그를 갖는 클래스를 작성하고 싶다면, 태그를 없앨 수 있는지, 그리고 태그 클래스를 클래스 계층으로 교체할 수 있는지를 심사숙고하자.
태크 필드를 갖는 기존 클래스를 발견하면, 클래스 게층 형태로 재구성을 고려하자.




반응형

댓글