728x90
반응형
장황한 메소드에서 각 부분을 간결한 메소드로 변경해서 보면 코드가 이해하기 쉬워 진다.
...는데 짧고 간단한 소스예제라 잘 모르겠음 ㅋ
이 방법 길고 복잡한 소스에서는 어떨까?
1. 전환할 메소드의 이름과 같은 새 클래스(Gamma)를 생성
2. 새 클래스에 final 필드로 클래스와 멤버변수를 속성 추가
3. 생성자로 필요 변수들을 받을수 있도록 함
4. 복잡한 계산 로직을 나눔
5. 메소드 객체로 전환할 클래스에서 새로 만든 클래스와 메소드를 호출
변경 전
Class Account
{
int gamma(int inputVal, int quantity, int yearToDate)
{
int importantValue_1 = (inputVal*quantity) + getDelta();
int importantValue_2 = (inputVal*yearToDate) + 100;
if( (yearToDate-importantValue_1) > 100)
importantValue_2 -= 20;
int importantValue_3 = importantValue_2 * 7;
return importantValue_3 - 2* importantValue_1;
}
}
변경 후
class Account
{
int gamma(int inputVal, int quantity, int yearToDate)
{
return new Gamma(this, inputVal, quantity, yearToDate).compute();
}
}
class Gamma
{
private final Account _account;
private int _inputVal;
private int _quantity;
private int _yearToDate;
public Gamma(Account source, int inputVal, int quantity, int yearToDate)
{
this._account = source;
this._inputVal = inputVal;
this._quantity = quantity;
this._yearToDate = yearToDate;
}
public int compute()
{
int importantValue_1 = (this._inputVal * this._quantity) + _account.getDelta();
int importantValue_2 = (this._inputVal * this._yearToDate) + 100;
importantValue_2 = this.getImportantValue_2(importantValue_1, importantValue_2);
int importantValue_3 = importantValue_2 * 7;
return importantValue_3 - 2 * importantValue_1;
}
public int getImportantValue_2(pImportantValue_1, pImportantValue_2)
{
importantValue_2 = pImportantValue_2;
if( (this._yearToDate - pImportantValue_1) > 100)
importantValue_2 -= 20;
return importantValue_2;
}
}
728x90
반응형
'IT > 리팩토링' 카테고리의 다른 글
리팩토링 - 코드 개선 방법 (0) | 2019.10.25 |
---|---|
[리팩토링] 클래스 멤버변수 이동 (0) | 2019.10.25 |
[리팩토링] 객체간 메소드 이동 (0) | 2019.10.25 |
[리팩토링] 매개변수로의 값 대입 제거 (0) | 2019.10.25 |
[리팩토링] 직관적 임시변수 사용 (0) | 2019.10.25 |