냄새 4. 긴 매개변수 목록
- etc/리팩토링
- 2023. 4. 30.
들어가기 전
이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다.
냄새 4. 긴 매개변수 목록 (Long Parameter List)
- 어떤 함수에 매개변수가 많을수록 함수의 역할을 이해하기 어려워진다.
- 과연 그 함수는 한 가지 일을 하고 있는게 맞는가?
- 불필요한 매개변수는 없는가?
- 하나의 레코드로 뭉칠 수 있는 매개변수 목록은 없는가?
- 매개변수를 줄일 수 있는 방법
- 어떤 매개변수를 다른 매개변수를 통해 알아낼 수 있다면, '매개변수를 질의 함수로 바꾸기'를 사용할 수 있다.
- 기존 자료구조에서 세부적인 데이터를 가져와서 여러 매개변수로 넘기는 대신, '객체 통째로 넘기기'를 사용할 수 있다.
- 일부 매개변수들이 대부분 같이 넘겨진다면, '매개변수 객체 만들기'를 적용할 수 있다.
- 매개변수가 플래그로 사용된다면, '플래그 인수 제거하기'를 사용할 수 있다.
- 여러 함수가 일부 매개변수를 공통적으로 사용한다면 '여러 함수를 클래스로 묶기'를 통해 매개변수를 해당 클래스의 필드로 만들고, 메서드에 전달해야 할 매개변수 목록을 줄일 수 있다.
매개변수가 많아지면 어떠한 문제점이 발생할까?
- 매개변수가 많아지고, 동일한 매개변수를 여러 메서드에서 받는 경우 메서드를 구별하기가 어려워진다.
- 예를 들어 A, B 메서드에서 받는 매개변수가 동일하다면 각 메서드를 구별하기 쉬울까?
- 함수의 역할을 구별하기가 어려워진다.
특정 메서드에 매개변수가 많아진다는 이야기는 해당 함수가 여러 가지의 일을 동시에 진행하고 있는 상황일 수도 있다. 이 경우 매개변수를 적절히 쪼개서 함수를 적절히 쪼개도록 하는 것이 더 좋을 수 있다. 그렇게 하면 함수는 특정한 한 가지의 일만 할 수 있게 되기 때문이다.
'etc > 리팩토링' 카테고리의 다른 글
리팩토링 15. 플래그 인수 제거하기 (0) | 2023.04.30 |
---|---|
리팩토링 14. 매개변수를 질의 함수로 바꾸기 (0) | 2023.04.30 |
리팩토링 13. 조건문을 다형성으로 바꾸기 (0) | 2023.04.29 |
리팩토링 12. 반복문 쪼개기 (0) | 2023.04.29 |
리팩토링 11. 조건문 분해하기 (0) | 2023.04.29 |