냄새 15. 추측성 일반화 Speculative Generality

  • 나중에 이러 저러한 기능이 생길 것으로 예상하여, 여러 경우에 필요로 할만한 기능을 만들어 놨지만 "그런 일은 없었고…"결국에 쓰이지 않는 코드가 발생한 경우.
  • XP의 YAGNI (You aren't gonna need it) 원칙을 따르자.
  • 관련 리팩토링
    • 추상 클래스를 만들었지만 크게 유요하지 않다면 "계층 합치기 (Collapse Hierarchy)"
    • 불필요한 위임은 "함수 인라인 (Inline Function)" 또는 "클래스 인라인 (Inline Class)"
    • 사용하지 않는 매개변수를 가진 함수는 "함수 선언 변경하기 (Change Function Declaration)"
    • 오로지 테스트 코드에서만 사용하고 있는 코드는 "죽은 코드 제거하기 (Remove Dead Code)"

지금 당장은 필요없지만 나중에 이런것들이 필요할것 같다 라고 생각해서 코드를 조금 더 일반적으로 작성하면서 코드가 늘어나는 경우. 결국엔 사용하지 않는 경우. 예를 들어, 주문을 하면 그 제품이 5개 이상이면 10% 할인해준다. 그런데 여기에서 "만약에 나중에 10개면 10%, 20개면 20%로 할인하지 않을까?"라고 생각해서 할인규칙, 할인적용 등 로직이 복잡해질 수 있다. 이렇게 작성하면 불필요할 수 있을 뿐 아니라 가독성도 현저히 떨어질 수 있다.

리팩토링 35. 죽은 코드 제거하기 Remove Dead Code

  • 사용하지 않는 코드가 애플리케이션 성능이나 기능에 영향을 끼치지는 않는다.
  • 하지만, 해당 소프트웨어가 어떻게 동작하는지 이해하려는 사람들에게는 꽤 고통 을 줄 수 있다.
  • 실제로 나중에 필요해질 코드라 하더라도 지금 쓰이지 않는 코드라면 (주석으로 감 싸는게 아니라) 삭제해야 한다.
    • 나중에 정말로 다시 필요해진다면 git과 같은 버전 관리 시스템을 사용해 복원할 수 있다.