리팩터링/냄새 (리팩터링할 시점)
냄새 8. 산탄총 수술(Shotgun Surgery)
developer-tj
2023. 3. 21. 12:00
반응형
산탄총 수술(Shotgun Surgery)는 하나의 변경으로 여러 개의 클래스를 수정해야 하는 코드 구조를 의미합니다.
즉, 특정한 기능을 추가하거나 수정하기 위해 여러 클래스의 코드를 일일이 수정해야 하는 경우를 말합니다.
(산탄총 처럼 넓게 퍼져서 여러군대 수술이 필요한 상황)
이러한 코드 구조는 유지보수성을 나쁘게 하고, 수정 작업이 너무 복잡해지며, 실수할 가능성도 높아집니다.
이를 방지하기 위해서는 관련된 기능들을 하나의 클래스로 추출하거나, 중복 코드를 제거하는 등의 방법을 사용하여 코드 구조를 개선할 필요가 있습니다.
적용 가능한 리팩터링 기법
- 함수 옮기기 (Move Function)
- 필드 옮기기 (Move Field)
- 여러 함수를 클래스로 묶기 (Combine Functions into Class)
- 여러 함수를 변환 함수로 묶기 (Combine Functions into Transform)
- 단계 쪼개기(Split Phase)
- 함수 인라인하기 (Inline Function)
- 클래스 인라인하기 (Inline Class)
산탄총 수술(Shotgun Surgery)과 뒤엉킨 변경(Divergent Change) 비교
산탄총 수술(Shotgun Surgery) | 뒤엉킨 변경(Divergent Change) | |
---|---|---|
발생 원인 | 하나의 변경사항이 여러 클래스/함수에 흩어져 있을 때 발생 | 하나의 클래스/함수가 여러 변경사항을 처리할 때 발생 |
해결 방법 | 함수 옮기기, 필드 옮기기, 여러 함수를 클래스로 묶기 등 | 클래스 추출하기, 단계 쪼개기 등 |
리팩터링 효과 | 변경사항을 단일 지점으로 집중시켜 유지보수 용이성 증가 | 코드를 단일 책임으로 분리하여 응집도 증가, 결합도 감소 등 |
예시 | 여러 클래스에서 중복으로 사용되는 함수를 하나로 묶는 경우 | 하나의 함수에서 여러 역할을 수행하도록 구현된 경우 |