냄새 7. 뒤엉킨 변경
- etc/리팩토링
- 2023. 5. 10.
들어가기 전
이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다.
냄새 7. 뒤엉킨 변경 (Divergent Change)
- 소프트웨어는 변경에 유연하게 대처할 수 있어야 한다.
- 어떤 한 모듈/함수/클래스가 여러가지 이유로 계속 변경되어야 하는 상황을 의미한다.
- 예) 새로운 결제 방식을 도입하거나, DB를 변경할 때 동일한 클래스에 여러 메서드를 수정해야 하는 경우.
- 각기 다른 이유로 변경이 일어나는데, 동일한 클래스, 메서드를 수정해야 하는 경우 모듈화가 제대로 되어 있지 않다고 생각할 수 있음.
- 서로 다른 문제는 서로 다른 모듈에서 해결해야 한다
- 모듈의 책임이 분리되어 있을수록 해당 문맥을 더 잘 이해할 수 있으며 다른 문제는 신경쓰지 않아도 된다.
- 관련 리팩토링 기술
- '단계 쪼개기' : 서로 다른 문맥의 코드를 분리할 수 있음.
- '함수 옮기기' : 적절한 모듈로 함수를 옮길 수 있다.
- 여러가지 일이 하나의 함수에 모여 있다면 '함수 추출하기'를 사용할 수 있다.
- 모듈이 클래스 단위라면 '클래스 추출하기'를 사용해 별도의 클래스로 분리할 수 있다.
좋은 코드는 응집도는 높고, 결합도는 낮아야 한다. 관련있는 코드가 한 클래스에 잘 모여있어야 하고, 변경점이 발생했을 때 변경해야하는 부분이 적어야 한다는 것이다. 이렇게 되어 있지 않으면 크게 두 가지 문제가 존재한다.
- 변경사항을 만들려고 할 때, 매번 동일한 클래스를 고치게 됨.
- 어떤 변경사항이 생기면, 여러 클래스를 왔다갔다하면서 고쳐야 함.
뒤엉킨 변경은 한 모듈이 여러 이유로 자주 변경되어야 하는 상황을 의미한다. 모듈화가 제대로 되어 있지 않으면 유연하게 대처하기가 어렵다. 또한 여러가지 이유로 한 모듈이 계속 변경된다면, 제대로 된 역할이 나누어져 있지 않은 것으로 볼 수 있다. 따라서 특정 함수 / 클래스가 많은 책임을 가지고 있는 것으로 볼 수 있다.
'etc > 리팩토링' 카테고리의 다른 글
리팩토링 25. 함수 옮기기 (0) | 2023.05.10 |
---|---|
리팩토링 24. 단계 쪼개기 (0) | 2023.05.10 |
리팩토링 23. 참조를 값으로 바꾸기 (0) | 2023.05.02 |
리팩토링 22. 여러 함수를 변환 함수로 묶기 (0) | 2023.05.02 |
리팩토링 21. 파생 변수를 질의 함수로 바꾸기 (0) | 2023.05.02 |