반응형
이 챕터는 자바를 처음 배울 때 계층형(추상) 클래스를 사용하는 이유를 설명하는 내용이라고 생각해도 될 것 같다. 그만큼 내용이 어렵지 않으므로 간단하게 설명한다.
1. 태그 클래스란?
태그 클래스란 특정한 변수를 기준으로 분기하여 두 가지 이상의 기능을 제공하는 클래스를 의미한다.
public class Figure {
enum Shape {
RECTANGLE, CIRCLE
};
final Shape shape;
double length;
double width;
double redius;
Figure(double length, double width) {
this.shape = Shape.RECTANGLE;
this.length = length;
this.width = width;
}
Figure(double redius) {
this.shape = Shape.CIRCLE;
this.redius = redius;
}
double area() {
switch (shape) {
case RECTANGLE:
return length * width;
case CIRCLE:
return Math.PI * (redius * redius);
default:
throw new AssertionError();
}
}
}
A 기능을 위한 생성자와 인스턴스 필드들이 존재하며, B 기능을 위한 생성자와 인스턴스 필드들이 각각 존재한다.
이러한 경우 단점은 다음과 같다.
1. 가독성이 떨어진다.
2. 필요 없는 기능을 위한 필드도 함께 생성되므로 메모리 요구량이 늘어난다.
3. 또 다른 기능이 생긴다면 해당 클래스를 수정해야 하며, swtich문도 모두 수정해야 한다.
2. 해결 방안
공통 기능은 추상(abstract) 클래스로 옮기고 서로 다른 기능은 하위 클래스로 구현한다.
반응형
'Java > [책] 이펙티브 자바' 카테고리의 다른 글
[이펙티브자바] 규칙26. 로 타입은 사용하지 말라 (0) | 2024.03.12 |
---|---|
[이펙티브자바] 규칙21. 자바에서 전략 패턴 작성법 (0) | 2022.06.25 |
[이펙티브자바] 규칙19. 상수 인터페이스(Constant Interface)는 안티패턴이다 (0) | 2022.06.20 |
[이펙티브자바] 규칙16. 계승보다 구성 (= extends보다 필드선언) (0) | 2022.03.20 |
[이펙티브 자바] 규칙15. Immutable(불변) 클래스 (0) | 2022.03.09 |