14장 점진적인 개선

인스턴스 변수 2개를 하나로 줄이는 경우

  1. setArgument함수에서 유형을 일일이 확인하는 코드를 없애고 싶다
  2. setIntArg, setStringArg, setBooleanArg를 해당 Argument Marshaler 파생 클래스로 내려야한다
  3. 하지만 setIntArg는 인자가 2개로 인수를 하나로 바꿔야 한다

→ args 배열을 list로 변환한 후 iterator를 set함수로 전달

public class Args {
	...
	private Iterator<String> currentArgument;
	private List<String> argsList;
}

...

private boolean parseArguments() throws ArgsException {
	for (currentArgument = argsList.iterator(); currentArgument.hasNext();) {
	String arg = currentArgument.next();
	parseArgument(arg);
	}

	return true;
}

리팩토링 중 코드를 넣고 빼는 일은 흔한 일이다

  1. 단계적으로 변경하거나 매번 테스트를 돌려야하므로 코드를 여기저기 옮긴다
  2. 리팩터링은 루빅 큐브 맞추기처럼 큰 목표 하나를 위해 자잘한 단계를 수없이 거친다