중복 코드에서 새로운 추가 사항을 구현하는 유일한 방법은 새로운 중복 코드를 추가하는 것 뿐이다.
→ 중복 코드가 늘어날수록 애플리케이션은 변경에 취약해지고, 버그가 발생할 가능성이 높아진다.
민첩하게 변경하기 위해서는 중복 코드를 추가하는 대신 제거해야 한다.
Enum을 이용하여 구분
→ 이는 낮은 응집도와 높은 결합도
→ 상속을 통해 해결
HashSet을 상속받아 InstrumentedHashSet을 생성, Add 함수를 상속받아 요소가 추가될 때마다 Count를 추가한다고 가정
→ AddAll에서 상위 클래스가 Add를 호출하지 않도록 변경
→ Count가 제대로 되지 않음