•
레거시 시스템을 다룰 때 가장 스트레스를 받는 일 중 하나가 코드를 변경한 후, 유사한 코드들에 대해 동일한 변경을 수행하는 것이다.
•
리팩토링을 통해 중복 코드를 제거한다면 전체 길이를 줄일 수 있겠지만 이런 노력이 과연 생산성의 유지, 증가로도 이어질까?
•
예제를 통해 알아보자.
첫 번째 단계
•
저자는 중복 코드를 발견하면 일단 한 걸음 물러나서 전체적인 모습을 파악한다.
◦
그 다음, 어떤 클래스로 할지, 추출된 중복 코드를 어떻게 할지 검토하기 시작한다.
◦
그러면 스스로 오버 엔지니어링을 하고 있음을 깨닫는다.
◦
소규모 중복 부분을 제거하는 것만으로도 충분히 효과적이며, 나중에 규모가 더 큰 중복 부분을 발견하기 쉽게 해주기 때문이다.
•
리팩토링을 충실히 수행했고 중복 제거를 잘 수행했다면 과연 시스템이 개선되었을까?
◦
새로운 명령어를 추가할 때, 추출해낸 클래스를 이용하면 그만이다.
◦
유연성 역시, 클래스를 이용하는 클라이언트의 입장이나, 서브 클래스의 입장에서 별도로 처리해주면 끝이다.
▪
재정의를 통해 해결할 수도 있다.
•
클래스 간의 중복을 제거하고 나면, 메소드는 매우 작고 집약적인 형태가 되는데, 각 메소드는 다른 메소드들이 하지 않는 처리를 하기 때문에 직교성이라는 효과를 얻을 수 있다.
◦
직교성이란 비의존성을 표현하는 단어로, 기존 동작을 변경해야할 때, 변경 지점이 하나라면 직교성이 있는 것이다.
•
중복 제거는 설계를 가다듬는 강력한 방법이다. 설계가 유연해질 뿐만 아니라, 변경을 더 빠르고 쉽게 수행할 수 있도록 해준다.