////
Search
Duplicate
🎁

Chapter 21. 반복되는 동일한 수정, 그만할 수는 없을까?

레거시 시스템을 다룰 때 가장 스트레스를 받는 일 중 하나가 코드를 변경한 후, 유사한 코드들에 대해 동일한 변경을 수행하는 것이다.
리팩토링을 통해 중복 코드를 제거한다면 전체 길이를 줄일 수 있겠지만 이런 노력이 과연 생산성의 유지, 증가로도 이어질까?
예제를 통해 알아보자.

첫 번째 단계

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