매개변수 제거

메서드가 어떤 매개변수를 더 이상 사용하지 않을 땐 그 매개변수를 삭제하자

동기

  • 프로그래머는 매개변수 추가는 부담없이 하면서도 매개변수 삭제는 꺼린다
    • 껍데기뿐인 매개변수를 놔둔다고 문제가 생기진 않을테고, 혹시 나중에 다시 필요할수도 있다는 자기합리화 때문이다
  • 매개변수는 필요한 정보를 나타낸다
    • 호출 부분에서 무슨 값을 전달할지 신중해야 한다
    • 매개변수를 제거하지 않으면 그 메서드를 사용하는 모든곳이 불필요한 추가 작업을 수행하게 된다
    • 이는 매우 혹독한 대가이고, 매개변수 제거가 어렵지 않다라는 사실을 생각하면 더욱 혹독한 대가이다

방법

  1. 메서드 시그니쳐가 상위클래스나 하위클래스에 선언되어 있는지 검사한다
    • 재정의 된 곳에서 해당 매개변수를 사용하지 않는지 확인해봐야 한다
    • 메서드 추가나 메서드 변경보다 좀 더 신중해야한다
  2. 매개변수를 제거한 새 메서드를 선언하고, 원본 메서드의 내용을 복사한다
  3. 원본 메서드에서 새 메서드를 호출하도록 수정한다
    • 참조하는 부분이 별로 없다면 생략 가능하다
  4. 원본 메서드 호출 부분을 전부 찾아서 새 메서드 호출로 바꾼다
  5. 원본 메서드를 삭제한다
    • 원본 메서드의 모든 호출 부분에 접근할 수 없다면 @Deprecated로 표시한다

참고 : 마틴 파울러, 『리팩토링』, 김지원 옮김, 한빛미디어(2012)