상속과 재사용
- 스프링 프레임 워크 초기버전에서 웹 요청을 처리하기 위한 클래스의 계층 구조를 보여준다.
- 하위 타입 클래스는 상위 타입 클래스를 확장하는 특징이 있다.
- 상속을 상위 클래스의 기능을 재사용, 확장하는 방법으로 활용하지만
상속을 통한 기능 재사용시 발생할 수 있는 단점
상위 클래스 변경 어려워진다.
- 상위 클래스를 변경하게 되면 모든 하위 클래스에 영향을 주게 된다.
- 상위클래스를 조금만 잘못 변경해도 모든 하위 클래스가 비정상적으로 동작할 수 있다.
- 어떤 하위 클래스가 생길 지 모르기 때문에, 상위 클래스 변경은 더욱더 어려워진다.
- 상위클래스 동작에 대해서 잘 알고 있어야 하는데, 이는 상위클래스의 캡슐화가 약해진다고 볼 수 있다.
클래스가 증가한다.
- 특정 storage에 특정 기능 필요하면, 상속으로 확장하여 클래스를 계속 만들게 된다.
- 이 상황에서 CompressedEncryptedCacheableStorage를 만들어야 한다면, 어떤 클래스를 상속받아 구현해야할 지 애매하게 된다.
상속을 오용하게 된다.
- 크게 문제가 없어 보이는데 테스트 해보았을 때
IDE의 핫키 . 를 사용하다가 이름만 보고 착각하여 실수를 유발하게 된다.
- 잘못 사용하게 될 가능성이 높은 상속을 사용함으로 인함이다.
상속의 단점 해결 방법 -> 조립
- 조립 (Composition)
- 여러 객체를 묶어서 더 복잡한 기능을 제공
- 보통 필드로 다른 객체를 참조하는 방식으로 조립
조립을 통한 기능 재사용
- 불필요한 기능까지 상속하면서 발생한 상속 오용 문제도 사라진다.
상속보다는 조립 (Composition over ingeritance)
- 상속하기에 앞서 조립으로 풀 수 없는지 검토
- 진짜 하위 타입인 경우에만 상속 사용
- 일반적으로 조립이 장점이 더 많다