티스토리 뷰
반응형
![]() |
|
때로 두 가지 이상의 기능을 가지고 있으며, 그중 어떤 기능을 제공하는지 표시하는 태그(tag)가 달린 클래스를 만날 때가 있다.
class Figure {
enum Shape { RECTANGLE, CIRCLE };
// 어떤 모양인지 나타내는 태그 필드
final Shape shape;
// 태그가 RECTANGLE일 때만 사용되는 필드
double length;
double width;
// 태그가 CIRCLE일 때만 사용되는 필드
double radius;
// 원을 만드는 생성자
Figure(double radius) {
shape = Shape.CIRCLE;
this.radius = radius;
}
// 사각형을 만드는 생성자
Figure(double length, double width) {
shape = Shape.RECTANGLE;
this.length = length;
this.width = width;
}
double area() {
switch(shape) {
case RECTANGLE:
return length * width;
case CIRCLE:
return Math.PI * (radius * radius)
default:
throw new AssertionError();
}
}
}
태그 달린 클래스는 enum 선언, 태그 필드, switch 문 등의 상투적 코드가 반복되며 생성자에서 관련 없는 필드를 초기화하지 않는 한, 필드들을 final로 선언할 수도 없으므로 상투적인 코드(boilerplate)는 더 늘어난다.
태그 기반 클래스(tagged class)는 너저분한데다 오류 발생 가능성이 높고, 효율적이지도 않는다. 태그 기반 클래스는 클래스 계층을 얼기설기 흉내 낸 것일 뿐이다.
abstract class Figure {
abstract double area();
}
class Circle extends Figure {
final double radius;
Circle(double radius) { ... }
double area() { ... }
}
class Rectangle extends Figure {
final double length;
final double width;
Rectangle(double length, double width) {
...
}
double area() { ... }
}
클래스 계층으로 변환한 결과, 단순하고 명료하며 원래 클래스에 있던 난잡하고 상투적인 코드도 없다.
또한 자료형 간의 자연스로운 계층 관계를 반영할 수 있어서 유연성이 높아지고 컴파일 시에 형 검사(type checking)를 하기 용이하다.
요약
- 태그 기반 클래스 사용은 피해야 한다
- 태그 필드가 있는 클래스를 만나게 되면, 리팩터링을 통해 클래스 계층으로 변환할 방법이 없는지 고민
반응형
'프로그래밍 > Java' 카테고리의 다른 글
| [이펙티브 자바] 규칙22. 멤버 클래스는 가능하면 static으로 선언하라 (0) | 2017.11.22 |
|---|---|
| [이펙티브 자바] 규칙21. 전략을 표현하고 싶을 때는 함수 객체를 사용하라 (0) | 2017.11.22 |
| [이펙티브 자바] 규칙19. 인터페이스는 자료형을 정의할 때만 사용하라 (0) | 2017.11.21 |
| [이펙티브 자바] 규칙18. 추상 클래스 대신 인터페이스를 사용하라 (0) | 2017.11.21 |
| [이펙티브 자바] 규칙17. 계승을 위한 설계와 문서를 갖추거나, 그럴 수 없다면 계승을 금지하라 (0) | 2017.11.21 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 이펙티브 자바
- Rails
- 웹프로그래밍
- 반도체관련주
- 현대차
- 국제유가
- 티스토리 초대장
- 한미반도체
- OpenStack
- 삼성전자
- ruby
- 이수페타시스
- 엔비디아
- javascript
- 자료구조
- CSS
- install
- rabbitmq
- Message Queue
- codecademy
- ruby on rails
- Java
- 알고리즘
- HBM
- html
- 프로그래밍
- ubuntu
- 투자전략
- 주식투자
- SK하이닉스
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
글 보관함
Copyright ⓒ 2018 moneystory.blog. All rights reserved.

