더북(TheBook)

리팩토링

이 규칙은 리팩토링 중 개선할 지점을 찾을 때 그리고 그 문제를 어떻게 처리할지 알아내는 데 도움이 된다. 시스템에서 중복되는 로직이 눈에 띄면 둘을 하나로 합쳐야 한다. 또 다른 위치를 발견하면 그 또한 새로 만든 포괄적 체계에 통합하라.

즉, 하나로 통합해야 하는 구현체가 많을 때는 한 번에 통합하는 구현체를 두 개로 제한하는 방식으로 점진적 리팩토링을 할 수 있다. 그 과정에서 시스템이 실제로 더 단순해지고 이해와 유지 보수에도 도움이 된다면 말이다. 가장 큰 효과를 보기 위해 어떤 순서로 통합하는 게 최선일지 고민해야 할 때도 있다. 답을 잘 모른다 해도 걱정하지 마라. 한 번에 두 개씩 통합하다보면 결국 모든 문제에 잘 맞는 하나의 좋은 솔루션이 완성된다.

통합하면 안 되는 것을 통합하지 않는 것도 중요하다. 때로는 두 개의 구현체를 하나로 통합했다가 시스템이 전체적으로 더 복잡해지기도 한다. 또 시스템 내의 모든 모듈, 클래스, 함수는 오직 하나의 개념만 나타내야 한다고 명시한 단일 책임 원칙Single Responsibility Principle을 어기게 되기도 한다.

시스템에 있는 ‘자동차’를 의미하는 코드와 ‘사람’을 의미하는 코드가 약간 유사하다고 해서 두 가지를 하나의 ‘자동차사람’ 클래스로 통합하지 마라. 이렇게 해서는 복잡성이 줄어들지 않는다. ‘자동차사람’은 사실 서로 다른 두 개념이 합쳐진 것이므로 두 개의 별도 클래스로 나타내는 것이 마땅하다.

‘둘은 너무 많다’가 우주의 절대적인 법칙은 아니다. 점진적 개발 작업을 진행할 때 설계 관련 결정을 내리는 데 활용하기 괜찮은 지침이다. 그리고 적어도 레거시 시스템을 리팩토링하고, 새로운 시스템을 개발하고, 코드를 단순화하는 작업에 꽤 유용하다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.