컴퓨터/이론 및 tools 사용

[리팩토링 refactoring] Simplifying Method Calls 메서드 호출 단순화 - Add Parameter 매개변수 추가

review777777 2016. 11. 24. 03:11
반응형

Add Parameter 매개변수 추가

메서드를 변경해야 하며 이 변경 사항은 이전에는 메소드에서 사용할 수 없었던 정보 또는 데이터를 추가해야한다.

Problem

메소드에 특정 조치를 수행하기 위한 충분한 데이터가 없다.

class Calendar {

  // ...

  private Set appointments;

  public ArrayList<Appointment> findAppointments(Date date, String name) {

    Set result = new ArrayList();

    Iterator iter = kent.getCourses().iterator();

    while (iter.hasNext()) {

      Appointment each = (Appointment) iter.next();

      if (date.compareTo(each.date) == 0) {

        if (name == null || (name != null && name == each.name)) {

          result.add(date);

        }

      }

    }

    return result;

  }

}


// Somewhere in client code

Date today = new Date();

appointments = calendar.findAppointments(today, null);

 

Solution

새 매개 변수를 만들어 필요한 데이터를 전달한다.

class Calendar {

  // ...

  private Set appointments;

  public ArrayList<Appointment> findAppointments(Date date) {

    Set result = new ArrayList();

    Iterator iter = kent.getCourses().iterator();

    while (iter.hasNext()) {

      Appointment each = (Appointment) iter.next();

      if (date.compareTo(each.date) == 0) {

        result.add(date);

      }

    }

    return result;

  }

}


// Somewhere in client code

Date today = new Date();

appointments = calendar.findAppointments(today);


 

절차

1. 메소드가 수퍼 클래스 또는 서브 클래스에 정의되어 있는지 확인

해당 메서드가있는 경우 이러한 클래스의 모든 단계를 반복해야한다
2. 다음 단계는 리팩토링 프로세스 중 프로그램 기능을 유지하는 데 중요

이전 메서드를 복사하여 새 메서드를 만들고 필요한 매개 변수를 추가

이전 메서드의 코드를 새 메서드 호출로 바꾼다. 새 매개 변수에 모든 값을 연결할 수 있다

(예 : 객체의 경우 null 또는 숫자의 경우 0).
3. 이전 메서드에 대한 모든 참조를 찾고 새 메서드에 대한 참조로 바꾼다.
4. 이전 방법을 삭제

이전 메소드가 공용 인터페이스의 일부인 경우 삭제가 가능하지 않는다.

이 경우 이전 메소드를 사용되지 않음으로 표시하라.

 

이익
• 여기에서는 새 매개 변수를 추가하고 메서드에서 필요로하는 데이터가 들어있는 새 전용 필드를 추가

필드는 항상 개체에 유지할 필요가없는 가끔씩 또는 자주 변경되는 데이터가 필요할 때 바람직하다.

이 경우 새 매개 변수가 개인 필드보다 적합 할 것이고 리팩토링은 효과가 있다

그렇지 않으면 비공개 필드를 추가하고 메서드를 호출하기 전에 필요한 데이터를 채운다.


단점

• 새 매개 변수를 추가하는 것이 항상 제거하는 것보다 쉽기 때문에 매개 변수 목록이 그로테스크 크기에 자주 나타나는 이유이다. 이것을 긴 매개 변수 목록이라고한다.
• 새 매개 변수를 추가해야하는 경우에는 클래스에 필요한 데이터가 없거나 기존 매개 변수에 필요한 관련 데이터가 들어 있지 않은 경우가 있다. 두 경우 모두 최상의 방법은 데이터를 주 클래스 또는 메서드 내부에서 이미 액세스 할 수있는 다른 클래스로 이동하는 것이다.


반응형