▪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. 이전 방법을 삭제
이전 메소드가 공용 인터페이스의 일부인 경우 삭제가 가능하지 않는다.
이 경우 이전 메소드를 사용되지 않음으로 표시하라.