상속은 상위 클래스의 기능을 재사용, 확장하는 방법으로 활용하나..
→ 상속을 통한 기능 재사용 시 단점 발생
상위 클래스 변경이 어려움
상위 클래스 변경의 여파가 계층도에 따라 하위 클래스로 영향을 줌으로
잘못 변경 시 하위 클래스들이 모두 비정상적으로 작동할 수 있음
클래스의 불필요한 증가
상속 오용
public class FlowController {
private Encryptor encryptor = new Encryptor(); // 필드로 조립
public void process() {
...
byte[] encryptedData = encryptor.encrypt(data);
...
}
}
암호화 기능이 필요하다면 암호화 기능을 제공하는 클래스를 상속받아서 구현하는 것이 아니고
필드로 객체를 참조하여 조립
상속보다는 조립(Composition over inheritance)