[java Anti Pattern Series] 01.basebean
January 15, 2025
BaseBean
개요
- 다른 클래스에서 확장할 수 있는 자바빈의 기본 클래스를 만드는 것이다.
- 즉, 여러 하위 클래스에서 공유할 수 있는 공통 기능을 포함하는 자바빈용 기본 클래스를 생성하는 것이다.
- 목적은 코드 중복을 줄이고 코드 재사용성을 높이는 것이다.
단점
1. 긴밀한 결합
- 기본 클래스, 그 하위 클래스 간의 긴밀한 결합이 큰 문제다.
- 상위를 수저하면 하위도 수정이 된다.
2. 상속 계층 구조 문제
- 상속 계층 구조의 확산이 문제가 된다.
- 더 많은 클래스가 기본 클래스를 확장함에 따라 계층 구조가 더 깊고 복잡해진다.
3. 유연성 부족
- baseBean은 설계의 유연성 부족으로 이어질 수도 있다.
- 하위 클래스는 필요하지 않거나 원하지 않더라도 기본 클래스의 기능을 강제로 상속받아야만 합니다.
4. 취약한 기본 클래스
- 하위 클래스의 변경에 취약한 기본 클래스를 생성할 수도 있다.
- 하위 클래스가 기본 클래스의 기능을 덮어 쓰면 기능이 손상되고 버그로 이어질 수도 있다.
5. 단일 책임 원칙 위반
- 여러 책임을 결합함으로써 단일 책임 원칙을 위반한다.
- 변경해야 할 이유가 하나만 있어야 하지만, 여러 책임이 있는 기본 클래스는 유지 관리 및 확장이 어려운 식이 될 수 있다.
권장 사항
1. 상속보다는 컴포지션
- 공통 동작을 별도의 클래스에 캡슐화해서 대상 클래스로 컴포지션하면 긴밀한 협력과 복잡한 상속을 피하는 두 마리 토끼를 다 잡을 수 있다.
2. 공통 기능에 인터페이스를 사용
- 타입 상속으로 공통기능을 적용해서 느슨한 결합을 촉진한다.
3. 디자인 패턴 적용
- Strategy, Decorator, FactoryMethod 등을 적용하는 것을 고려하자
4. SOLID 준수
- SOLID를 준수하면 BaseBean을 구성할 이유를 찾기 어려워진다.