brunch

You can make anything
by writing

C.S.Lewis

by 이승현 Apr 09. 2018

클래스와 인터페이스

#20 태그(tagged) 클래스보다는 클래스 계층을 이용하자

Effective Java - 클래스와 인터페이스


#20 태그(tagged) 클래스보다는 클래스 계층을 이용하자


인스턴스의 특성을 분류하는 태그(tag) 필드를 갖는 클래스를 태그(tagged) 클래스라 합니다.


#01 Figure 태그 클래스


이러한 태그 클래스들을 이용한 경험들이 다들 있을 텐데, 가독성 측면에서 정말 안 좋습니다.

특성별로 쓰이는 필드들로 인해 필요 없는 메모리 할당 해지가 늘어나 성능면에서도 안 좋고 쓸데없이 커지고 가독성이 안 좋아집니다.

결국 태그 클래스는 코드가 쓸데없이 장황하고, 에러가 나기 쉬우며, 비효율 적입니다.


태그 클래스를 클래스 계층으로 변환하면, 이러한 문제들을 해결할 수 있습니다.


1. 우선 태그 값에 따라 동작이 달라지는 메서드(area 메서드)를 추상 클래스의 추상 메서드로 정의합니다.

만약 태그 값에 의존하지 않고 공통적으로 쓰이는 메서드나 필드가 있다면 이 또한 추상 클래스에 넣습니다.

#02 Figures 추상 클래스


2. 태그 클래스의 각 인스턴스 종류를 추상 클래스(Figure 2)의 서브 클래스(Circle, Rectangle)로 정의합니다.

각 인스턴스에 속하는 데이터 필드를 각각의 서브 클래스에 넣습니다.

그리고 아래와 같이 추상 메서드(area)를 구현합니다.

#03 Circle & Rectangle 클래스


이렇게 구현하면 앞서 태그 클래스의 문제점들도 사라지게 됩니다.

그리고 서브 클래스를 추가해서 이 클래스 계층을 쉽게 확장할 수 도 있습니다.

따라서 태그 클래스를 이용할 때, 클래스 계층으로 변환이 가능한지를 우선 생각해야 합니다.




매거진의 이전글 클래스와 인터페이스
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari