Page 21 -
P. 21
리팩토링
이 규칙은 리팩토링 중 개선할 지점을 찾을 때 그리고 그 문제를 어떻게
처리할지 알아내는 데 도움이 된다. 시스템에서 중복되는 로직이 눈에 띄면
둘을 하나로 합쳐야 한다. 또 다른 위치를 발견하면 그 또한 새로 만든 포괄
적 체계에 통합하라.
즉, 하나로 통합해야 하는 구현체가 많을 때는 한 번에 통합하는 구현체를
두 개로 제한하는 방식으로 점진적 리팩토링을 할 수 있다. 그 과정에서 시
스템이 실제로 더 단순해지고 이해와 유지 보수에도 도움이 된다면 말이다.
가장 큰 효과를 보기 위해 어떤 순서로 통합하는 게 최선일지 고민해야 할
때도 있다. 답을 잘 모른다 해도 걱정하지 마라. 한 번에 두 개씩 통합하다
보면 결국 모든 문제에 잘 맞는 하나의 좋은 솔루션이 완성된다.
통합하면 안 되는 것을 통합하지 않는 것도 중요하다. 때로는 두 개의 구
현체를 하나로 통합했다가 시스템이 전체적으로 더 복잡해지기도 한다. 또
시스템 내의 모든 모듈, 클래스, 함수는 오직 하나의 개념만 나타내야 한다
고 명시한 단일 책임 원칙 Single responsibility principle을 어기게 되기도 한다.
시스템에 있는 ‘자동차’를 의미하는 코드와 ‘사람’을 의미하는 코드가 약간
유사하다고 해서 두 가지를 하나의 ‘자동차사람’ 클래스로 통합하지 마라.
이렇게 해서는 복잡성이 줄어들지 않는다. ‘자동차사람’은 사실 서로 다른 두
개념이 합쳐진 것이므로 두 개의 별도 클래스로 나타내는 것이 마땅하다.
‘둘은 너무 많다’가 우주의 절대적인 법칙은 아니다. 점진적 개발 작업을
진행할 때 설계 관련 결정을 내리는 데 활용하기 괜찮은 지침이다. 그리고
적어도 레거시 시스템을 리팩토링하고, 새로운 시스템을 개발하고, 코드를
단순화하는 작업에 꽤 유용하다.
12장 둘은 너무 많다 051
심플소프트웨어_06.indd 51 2019-10-18 오전 10:34:00