필기를 재구성하다

2726 단어
[실례 재구성]
1. 함수 추출(Extract Methods)은 함수에 코드 세그먼트를 넣고 함수 이름이 그 함수의 용도를 설명하도록 한다.
String name = request.getParameter("Name");
if(!isNullOrEmpty(name)){
	......
}
String age = request.getParamter("Age");
if(!isNullOrEmpty(name)){
	......
}
private boolean isNullOrEmpty(final String string){
	if(string!=null && string.length()>0){
		return true;
	}else{
		return false;
	}
}

2. 함수 내연화(Inline Method)
만약 함수의 논리가 너무 간단하다면, 그것을 호출하는 코드로 이동시켜 이 함수를 취소한다
int getRating(){
	return (_numberOfLateDeliveries>5) ? 2 : 1;
}

3. 임시 변수를 인라인화(Inline Temp)
변수가 간단한 표현식에 한 번 부여되면 변수가 그 표현식으로 바뀐다
return (anOrder.basePrice()>1000);

4. 임시 변수 대신 질의(Replace Temp with Query)
if(basePrice()>1000)
	return basePrice()*0.95;
else
	return basePrice()*0.98;
...
double basePrice(){
	return _quantity*_itemPrice;
}

5. 해석 변수 가져오기(Introduce Explaining Variable)
복잡한 표현식 결과를 임시 변수에 넣고 변수 이름으로 표현식의 용도를 설명하다
boolean isMacOs = platform.toUpperCase().indexOf("MAC") > -1;
boolean isIEBrower = browser.toUpperCase().indexOf("IE") > -1;
boolean wasResized = resize > 0;
if(isMacOs && isIEBrowser && wasInitialized() && wasResized){
	....
}

6. 임시 변수 해부(Split Temporary Variable)
하나의 임시 변수는 여러 번 값을 부여받는다. (순환에 있지 않다) 매번 값을 부여할 때마다 독립된 임시 변수를 만들어야 한다
double temp = 2(_height+_width);
System.out.println(temp);
temp=_height*_width;
System.out.println(temp);

재구성:
double perimeter = 2*(_height+_width);
System.out.println(perimeter);
double area = _height*_width;
Sytem.out.println(area);

7. 중첩된 조건문 대신 위계 문구(Replace Nested Conditional with Guard Clauses)
함수 중 조건문은 정상적인 실행 경로를 보기 어려우므로, 위문구로 끼워 넣은 조건을 대체한다
double getPayAmount(){
	if(...) return deadAmount();
	if(...) return separatedAmount();
	if(...) return retiredAmount();
	return normalPayAmount();
}

8. 분해 조건 표현식(Decompose Conditional)은 복잡한 조건문 분기에서 별도의 함수를 추출합니다.
if(date.before(SUMMER_START) || date.after(SUMMER_END))
	charge = quantity * _winterRate + _winterServiceCharge;
else
	charge = quantity * _summerRate;
----------------------------------------
if(notSummer(date))
	charge = winterCharge(quantity);
else
	charge = summerCharge(quantity);

[불량 코드]
=========================================
1. 중복 코드(Duplicated Code)
2. 너무 긴 함수(Long Method)
3. 너무 큰 클래스(Large Class)
4. 너무 긴 매개변수 열(Long Parameter List)
5. Divergent Change(Divergent Change): 클래스가 서로 다른 이유로 수정됩니다.클래스를 여러 개로 나누고, 클래스마다 하나의 변화만으로 수정합니다.

좋은 웹페이지 즐겨찾기