
해당 포스팅은 인프런 백기선님의 '리팩토링'을 학습 후 정리한 내용입니다.
동일한 코드를 여러 메소드에서 사용하는 경우 할 수 있는 리펙토링 기술이다.
"의도"와 "구현"을 분리한다.

무슨일을 하는 코드인지 알아내려고 노력해야 하는 코드(의도가 모호한 코드) 해당 코드를 함수로 분리하며, 함수 이름은 "무슨 일을 하는지"로 표현할 수 있다.
한 줄 짜리 메소드도 의도를 분명히 할 수 있다면 추출하는 것이 좋다.
거대한 함수 안에 들어있는 주석은 추출한 함수를 찾는 데 있어 좋은 단서가 될 수 있다.

여러 하위 클래스에 동일한 코드들이 존재한다면, 다음의 리펙토링 기술을 적용해야 할 차례이다.

중복된 코드들은 당장 잘 동작하더라도, 미래에 버그를 만들어 낼 빌미를 제공한다.
여러 하위 클래스에 동일한 코드가 있다면, 손쉽게 이 방법을 적용할 수 있다.
비슷하지만 일부 값이 다른 경우, "함수 매개변수화하기(Parameterize Function)" 리펙토링을 적용 후 해당 방법을 사용할 수 있다.
/** 함수매개변수화 하기 전 */
private double tenPercentRaise(Map aPerson) {
aPerson.salary = aPerson.salary.multiply(1.1);
return aPerson;
}
private double fivePercentRaise(Map aPerson) {
return aPerson.salary.multiply(1.05);
}
/** 함수매개변수화 한 후 */
private double raise(aPerson, factor) {
return aPerson.salary.multiply(1 + factor);
}
/** 필드올리기 적용 전 */
class Employee {}
class Person extends Employee {
private name;
}
class Developer extends Employee {
private name;
}
/** 필드올리기 적용 후 */
class Employee {
protected name;
}
class SalesPerson extends Employee {}
class Engineer extends Employee {}