item 23 : 태그 달린 클래스보다는 클래스 계층구조를 활용하라
1. 태그 달린 클래스
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("알 수 없는 모양: " + shape);
}
}
}
1) 태그 달린 클래스란?
2) 태그 달린 클래스의 단점
2. 서브타이핑 (subtyping) : 클래스 계층 구조를 이용한 해결 방법
1) 클래스 계층 구조로 한 코드
2) 클래스 계층구조의 장점
3) 추가적인 확장 (정사각형 예시)
3. 추상 클래스를 쓰는 때
1) 공통 상태나 구현이 필요할 때
2) 공통된 행동(메서드)을 정의할 때
3) 상속의 편리함
4) 제한된 상속
5) 공통 인터페이스를 위한 골격 구현 제공
결론: 왜 추상 클래스를 사용하나?
4. 인터페이스를 통한 서브타이핑
1) 서브타이핑과 인터페이스
예시
2) 추상 클래스 vs 인터페이스: 서브타이핑 관점
서브타이핑은 상위 타입(인터페이스나 추상 클래스)의 동작을 하위 타입이 구현해서 상위 타입처럼 동작할 수 있는 관계를 말하며, 인터페이스는 서브타이핑을 구현하는 중요한 방법 중 하나이다.
5. 스터디에서 추가 설명 : API SERVER APPLICATION 에서 Entity를 클래스 계층구조로 만드려면
1) 퍼시스턴스 레이어 활용

예시

✨ 최종 정리
Last updated