냄새 20. 거대한 클래스
- etc/리팩토링
- 2023. 5. 10.
들어가기 전
이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다.
냄새 20. 거대한 클래스 (Large Class)
- 거대한 클래스
- 어떤 클래스가 너무 많은 일을 하다보면 필드도 많아지고, 중복 코드도 보이기 시작한다.
- 클라이언트들이 거대한 클래스가 제공하는 기능을 각각 일부만 사용한다면, 각각의 세부 기능을 별도의 클래스로 분리할 수 있다.
- 리팩토링 방법
- '클래스 추출하기'를 사용해 관련있는 필드를 한 곳으로 모을 수 있다.
- 상속 구조를 만들 수 있다면 '슈퍼 클래스 추출하기' 또는 '타입 코드를 서브클래스로 교체하기'를 적용할 수 있다.
- 클래스 내부에 산재하는 중복 코드는 '메서드 추출'하여 제거할 수 있다.
거대한 클래스의 문제는 다음과 같다.
- 클래스의 책임이 많아지면 필드가 많아진다.
- 필드가 많아지면, 필드를 사용하는 메서드도 많아진다.
- 그런데 필드가 많으면 다른 곳으로 보내기 싫어진다. 왜냐하면 이 클래스에 이미 필드가 있기 때문에 이곳에 필드를 조금 추가하는 식으로 하면 개발하기 쉽기 때문이다. 그런데 그렇게 필드가 쌓이면 거대한 클래스가 되어버린다.
각 필드를 활용하는 메서드들이 얽히고 섥히면서 필드를 분리하기가 사실상 어려워진다. 너무 거대해지기 전에 필드 / 메서드들을 뜯어내서 다른 클래스로 추출하는 것이 미래를 생각하면 더욱 좋다.
필드를 뜯어낼 때 기준은?
- 관련있는 필드들 (어떤 메서드에서 항상 같이 쓰이는 필드)을 기준으로 뜯어냄.
'etc > 리팩토링' 카테고리의 다른 글
냄새 21. 서로 다른 인터페이스의 대안 클래스들 (0) | 2023.05.10 |
---|---|
리팩토링 41. 슈퍼클래스 추출하기 (0) | 2023.05.10 |
냄새 19. 내부자 거래 (0) | 2023.05.10 |
리팩토링 40. 서브클래스를 위임으로 바꾸기 (0) | 2023.05.10 |
리팩토링 39. 슈퍼클래스를 위임으로 바꾸기 (0) | 2023.05.10 |