리팩터링/냄새 (리팩터링할 시점)

냄새 4. 긴 매개 변수 목록 (Long Parameter List)

developer-tj 2023. 2. 24. 12:00
반응형

긴 매개변수 목록(Long Parameter List)은 함수의 매개변수가 너무 많거나, 매개변수의 종류가 복잡해져서 함수의 이해와 유지보수를 어렵게 만드는 문제를 해결하는 기법입니다.

 

긴 매개변수 목록 문제는 매개변수의 순서를 혼란스럽게 만들 수 있고, 함수 호출 코드를 작성할 때도 실수를 유발할 수 있습니다.

- 과연 해당 함수가 한가지 일을 하고 있는지?

- 매개변수가 반드시 필요한지?

 

따라서 이러한 문제를 해결하기 위해서는 긴 매개변수 목록을 개선하거나, 이를 대체할 수 있는 더 나은 설계를 생각해보는 것이 좋습니다.

 

긴 매개변수 목록 문제를 해결하는 대표적인 리팩토링 기법으로는 "매개변수 객체 만들기(Introduce Parameter Object)"와 "객체 통째로 넘기기(Preserve Whole Object)"가 있습니다.

 

"매개변수 객체 만들기(Introduce Parameter Object)"는 여러 개의 매개변수를 하나의 객체로 묶어서 전달하는 방법입니다. 이렇게 하면 함수의 매개변수 개수를 줄일 수 있고, 매개변수의 순서도 더 명확하게 정할 수 있습니다.

 

"객체 통째로 넘기기(Preserve Whole Object)"는 함수가 필요로 하는 매개변수를 하나의 객체로 묶어서 전달하는 방법입니다. 이 방법을 사용하면 객체의 속성을 직접 참조하여 필요한 값에만 접근할 수 있기 때문에, 매개변수 개수를 줄일 수 있습니다.

 

이외에도 긴 매개변수 목록을 해결하기 위한 다양한 방법이 존재합니다.

이를 통해 코드의 가독성과 유지보수성을 높일 수 있습니다.

 

그 외 방법으로는 

Use a Builder: Builder 패턴을 사용하여 객체를 생성할 때, 하나의 메서드를 호출하고 필요한 매개변수를 추가하는 방식을 사용합니다. 이를 통해 매개변수의 개수를 줄일 수 있습니다.

Use a Configuration File: 설정 파일을 사용하여 매개변수를 관리하는 방식을 사용합니다. 이를 통해 매개변수를 외부에서 지정하고 관리할 수 있습니다.

Use a Data Structure: 데이터 구조를 사용하여 매개변수를 그룹화하고 전달하는 방식을 사용합니다. 예를 들어, 구조체나 클래스를 사용하여 매개변수를 묶어서 전달할 수 있습니다.

Use Default Values: 기본값을 사용하여 매개변수를 생략할 수 있습니다. 이를 통해 필요한 매개변수만 전달하고 생략할 수 있는 매개변수는 생략할 수 있습니다.

 

 

다음과 같은 리팩터링을 사용하여 매개변수를 줄일 수 있습니다.

리팩터링 8. 매개변수 객체 만들기

리팩터링 9. 객체 통째로 넘기기

리팩터링 14. 매개변수를 질의 함수로 바꾸기

리팩터링 15. 플래그 인수 제거하기

리팩터링 16. 여러 함수를 클래스로 묶기