냄새 8. 산탄총 수술
- etc/리팩토링
- 2023. 5. 10.
들어가기 전
이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다.
냄새 8. 산탄총 수술 (Shotgun Surgery)
- 어떤 한 변경 사항이 생겼을 때, 여러 모듈을 (여러 함수 또는 여러 클래스를) 같이 수정해야하는 상황을 '산탄총 수술'이라고 한다.
- 뒤엉킨 변경 냄새와는 반대의 상황임. 뒤엉킨 변경은 여러 변경을 위해서 하나의 클래스만 계속 수정하는 경우임.
- 예) 새로운 결제 방식을 도입하려면 여러 클래스의 코드를 수정해야 한다.
- 변경 사항이 여러 곳에 흩어진다면 찾아서 고치기도 어렵고 중요한 변경 사항을 놓칠 수 있는 가능성도 생긴다.
- 관련 리팩토링 기술
- '함수 옮기기' 또는 '필드 옮기기'를 사용해서 필요한 변경 내역을 하나의 클래스로 모을 수 있다.
- 비슷한 데이터를 사용하는 여러 함수가 있다면 '여러 함수를 클래스로 묶기'를 사용할 수 있다.
- '단계 쪼개기'를 사용해 공통으로 사용되는 함수의 결과물들을 하나로 묶을 수 있다.
- '함수 인라인'과 '클래스 인라인'으로 흩어진 로직을 한 곳으로 모을 수 있다. (리팩토링 전처리도 가능)
산탄총에 맞은 부위를 수술하는 것 같은 느낌의 코드 냄새다. 자세한 의미는 변경점 하나를 반영하기 위해서 여러 모듈을 수정해야 하는 상황을 의미한다. 이 말은 코드의 응집도 나쁘고, 결합도가 높은 것을 의미한다. 이런 코드들은 다음 리팩토링으로 해결할 수 있다.
이전의 뒤엉킨 변경은 '여러가지 이유'로 '하나의 클래스'만 계속 손보아야 했다. 산탄총 수술은 '하나의 이유'로 '여러 클래스'를 손봐야 하는 것을 의미한다.
관련된 리팩토링 기술은 다음과 같다. 모두 코드의 응집도를 높여주는 작업으로 이해할 수 있다.
- 함수/필드 옮기기 : 필요한 녀석을 필요한 클래스로 적절히 옮겨준다. 즉, 응집도를 높여주는 작업이다.
- 여러 함수를 클래스로 묶기 : 비슷한 데이터를 사용하는 여러 함수가 있다면 묶어준다. 응집도를 높여주는 작업이다.
- 단계 쪼개기 : 함수 하나에서 여러 일을 한다면, 함수를 여러 개로 분리한다. 그리고 이 함수를 필요한 클래스로 옮겨준다. 응집도를 높여주는 작업이다.
- 함수 인라인 / 클래스 인라인 : 흩어진 코드들을 하나로 모은다. 리팩토링이 잘못된 코드들을 다시 하나의 함수로 합친 후, 다시 의미있는 형태로 함수를 추출해서 필요한 클래스로 이동시킨다. 응집도를 높여주는 작업이다.
'etc > 리팩토링' 카테고리의 다른 글
리팩토링 28. 함수 인라인 (0) | 2023.05.10 |
---|---|
리팩토링 27. 필드 옮기기 (0) | 2023.05.10 |
리팩토링 26. 함수 옮기기 (0) | 2023.05.10 |
리팩토링 25. 함수 옮기기 (0) | 2023.05.10 |
리팩토링 24. 단계 쪼개기 (0) | 2023.05.10 |