코드 중복
코드 악취 중 하나.
중복된 코드의 비용
여러번 읽기, 여러번 고치기:
Duplication means that every time you read these copies, you need to read them carefully to see if there’s any difference. If you need to change the duplicated code, you have to find and catch each duplication. —Chapter 3, Refactoring: Improving the design of existing code
그나마 어디에 중복이 있는지 항상 알고 있으면 차라리 문제가 적다. 중복 코드가 있는데 중복인줄 몰라서 하나만 고치고 나머지를 안고치는 순간 버그 혹은 동작의 비일관성이 생긴다. 이런 문제는 보통 한참 뒤에야 발견되기 때문에 비용이 크다. (결함비용증가)
작은 중복
아주 작은 중복이나 명확히 드러나지 않는 중복을 놓치지 않는 게 중요하다. 훗날 버그의 원인이 된다.
우연한 일치
동일한 리터럴, 동일한 식 등이 반드시 중복은 아니다. 우연한 일치일 수 있다. 하나를 고쳐야하는 상황에서 반드시 다른 하나도 고쳐야하는 경우만 중복으로 다뤄야 한다.
관련 리팩토링
- Extract function
- Slide statements
- Pull up method
다른 유익한 관점들
Use duplication to discover missing design elements:
Duplication is always a bad thing, unless you look at it as motivation to find the missing design element. —Chapter 23, Test-driven development: by example
의도적으로 중복을 만들기: Reconcile differences