티스토리 뷰

Study

[Refactoring] 긴 매개변수 목록

hyuuny 2022. 2. 24. 14:37

긴 매개변수 목록

  • 함수에 매개변수가 많을수록 함수의 역할을 이해하기 어려워진다.
    • 과연 그 함수는 한가지 일을 하고 있는게 맞는가?
    • 불필요한 매개변수는 없는가?
    • 하나의 레코드로 뭉칠 수 있는 매개변수 목록은 없는가?
  • 어떤 매개변수를 다른 매개변수를 통해 알아낼 수 있다면, 매개변수를 질의 함수로 바꾸기 (Replace Parameter with Query) 를 사용할 수 있다.
  • 기존 자료구조에서 세부적인 데이터를 가져와서 여러 매개변수로 넘기는 대신, 객체 통째로 넘기기 (Preserve Whole Object) 를 사용할 수 있다.
  • 일부 매개변수들이 대부분 같이 넘겨진다면, 매개변수 객체 만들기 (Introduce Parameter Object) 를 적용할 수 있다.
  • 매개변수가 플래그로 사용된다면, 플래그 인수 제거하기 (Remove Falg Argument) 를 사용할 수 있다.
  • 여러 함수가 일부 매개변수를 공통적으로 사용한다면 여러 함수를 클래스로 묶기 (Combine Functions into Class)를 통해 매개변수를 해당 클래스의 필드로 만들고 매서드에 전달해야 할 매개변수 목록을 줄일 수 있다.

매개변수를 질의 함수로 바꾸기 (Replace Parameter with Query)


  • 함수의 매개변수 목록은 함수의 다양성을 대변하며, 짧을수록 이해하기 좋다.
  • 어떤 한 매개변수를 다른 매개변수를 통해 알아낼 수 있다면 중복 매개변수라 생각할 수 있다.
  • 매개변수에 값을 전달하는 것은 함수를 호출하는 쪽의 책임이다. 가능하면 함수를 호출하는 쪽의 책임을 줄이고 함수 내부에서 책임지도록 노력한다.
  • 임시 변수를 질의 함수로 바꾸기함수 선언 변경하기를 통해 이 리팩토링을 적용한다.

플래그 인수 제거하기 (Remove Falg Argument)


  • 플래그는 보통 함수에 매개변수로 전달해서, 함수 내부의 로직을 분기하는데 사용한다.
  • 플래그를 사용한 함수는 차이를 파악하기 어렵다.
    • bookConcert(customer, false), bookConcert(customer, true)
    • bookConcert(customer), premiumBookConcert(customer)
  • 조건문 분해하기 (Decompose Condition)를 활용할 수 있다.

여러 함수를 클래스로 묶기 (Combine Functions into Class)


  • 비슷한 매개변수 목록을 여러 함수에서 사용하고 있다면 해당 메소드를 모아서 클래스를 만들 수 있다.
  • 클래스 내부로 메소드를 옮기고, 데이터를 필드로 만들면 메소드에 전달해야 하는 매개변수 목록도 줄일 수 있다.



Reference
백기선. 코딩으로 학습하는 리팩토링. 인프런. https://www.inflearn.com/course/%EB%A6%AC%ED%8C%A9%ED%86%A0%EB%A7%81/dashboard

'Study' 카테고리의 다른 글

[Refactoring] 가변 데이터  (0) 2022.02.26
[Refactoring] 전역 데이터  (0) 2022.02.25
[Refactoring] 긴 함수  (0) 2022.02.21
[Refactoring] 중복 코드  (0) 2022.02.20
[Refactoring] 이해하기 힘든 이름  (0) 2022.02.19
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함