3.6.2 잠재적인 원인
추측에 근거한 설계
설계자가 ‘미래를 고려해서’ 시스템을 설계하거나 ‘단지 미래에 필요할 때를 대비하여’ 추상화를 제공하려고 할 때 이런 악취를 이끌 수 있다.
요구 사항 변경
요구 사항이 계속해서 바뀌면 초기 요구 사항을 충족하려고 만든 추상화는 더 이상 필요가 없다. 그럼에도 추상화가 설계에 계속해서 남아 있을 때 미활용 추상화가 된다.
유지보수 과정에서 남겨진 쓰레기
낡은 추상화를 정리하지 않은 상태에서 유지보수나 리팩토링 활동을 하면 참조되지 않는 추상화를 초래할 수 있다.
코드를 망가뜨린다는 공포
개발자들이 오래된 코드를 삭제하지 못하는 이유 중 하나는 코드의 다른 클래스에서 이것을 계속 사용하고 있는지 확신하지 못하기 때문이다. 코드 일부가 사용 중인지 아닌지를 판단하기 어려운 대규모 코드 기반에서 이런 현상이 특히 자주 발생한다.