객체지향에서 상속은 코드 재사용과 확장을 할 수 있는 기법이지만 도리어 객체지향을 헤칠 수도 있다고 한다
왜일까?
먼저 상속이 왜 쓰이는지 알아보자
중복코드는 돈리핏유어셀프(DRY 원칙) 에 반한다
왜냐면 동일한 코드가 수정 시 중복된 코드들도 수정이 되어야하기 때문이다
이를 해결하기 위해 상속을 이용해 중복 코드를 제거할 수 있다
마법같지만 안타깝게도 단점도 존재한다
상속받은 코드를 기준으로 기능을 구현해야 하기 때문에 요구사항과 구현에 괴리가 생겨 코드를 이해하기 어려워진다
또한 부모 클래스가 수정이 될 때 자식 클래스도 영향을 받는다
이렇듯 자식 클래스가 부모 클래스의 변경에 취약해지는 현상을 취약한 기반 클래스 문제라고 한다
상속은 자식 클래스가 부모 클래스의 구현 세부사항에 의존하도록 만들기 때문에 캡슐화를 약화시킨다.
구체적으로 상속이 가지는 문제점들을 알아보자
부모 클래스에 자식 클래스가 강결합 됨
불필요한 인터페이스 상속 문제
상속받은 부모 클래스의 메서드가 자식 클래스의 내부 구조에 대한 규칙을 깨트릴 수 있음