[Effective Java] item 18. 상속보다는 컴포지션을 사용하라
상속은 코드를 재사용하는 강력한 수단이지만 잘못 사용하면 오류를 만들어내기 쉬운 소프트웨어가 된다. 슈퍼 클래스와 서브 클래스가 같은 프로그래머에 의해 다루어지며 통제하는 경우는 안전하다. 확장할 목적으로 잘 설계되었고 문서화도 잘 된 클래스 또한 안전하다. 그러나 외부 패키지에서 이를 상속하는 경우 문제가 발생한다. 메서드 호출과 달리 상속은 캡슐화를 깨뜨린다. 다르게 말하면 슈퍼 클래스가 어떻게 구현되었느냐에 따라 서브 클래스의 동작에 문제가 생길 수 있다. 슈퍼 클래스는 버전마다 내부 구현이 달라질 수 있다. 이때문에 확장을 충분히 고려하여 설계하지 않거나 문서화가 부족한 경우 이를 상속하는 서브 클래스들은 이에 발맞춰서 코드를 수정해야 하는 불상사가 생긴다. 구체적인 예제를 살펴보자. HashSe..
2021.11.26