2011. 9. 19. 22:58
DB/MySQL
'DB > MySQL' 카테고리의 다른 글
MySQL function 생성 실패시 (0) | 2011.10.06 |
---|---|
컬럼 추가, 컬럼명 변경 (0) | 2011.09.24 |
MySQL 버전 확인 (0) | 2010.11.24 |
MySQL 문자셋 변경 (0) | 2009.12.17 |
MySQL의 status 명령어(현재 db상태 확인) (0) | 2009.12.17 |
MySQL function 생성 실패시 (0) | 2011.10.06 |
---|---|
컬럼 추가, 컬럼명 변경 (0) | 2011.09.24 |
MySQL 버전 확인 (0) | 2010.11.24 |
MySQL 문자셋 변경 (0) | 2009.12.17 |
MySQL의 status 명령어(현재 db상태 확인) (0) | 2009.12.17 |
String findPerson(String[] people) { for (int i=0; i<people.length; i++) { if(people[i].equals("Don")) { return "Don"; } if(people[i].equals("John")) { return "John"; } if(people[i].equals("Kent")) { return "Kent"; } } return " "; } |
String findPerson(String[] people) { List candidates = Arrays.asList(new String[] {"Don", "John", "Kent"}); for (int i=0; i<people.length; i++) { if(candidates.contains(people[i])) return people[i]; } return " "; } |
Replace Method with Method Object (0) | 2011.09.19 |
---|---|
Remove Assignments to Parameters (0) | 2011.09.19 |
Split Temporary Variable (0) | 2011.09.19 |
Introduce Explaining Variable (0) | 2011.09.19 |
Replace Temp with Query (0) | 2011.09.19 |
class Account .... int gamma (int inputVal, int quantity, int yearToDate) { int importantValue1 = (inputVal * quantity) + delta(); int importantValue2 = (inputVal * yearToDate) + 100; if ((yearToDate - importantValue1) > 100) importantValue2 -= 20; int importantValue3 = importantValue2 * 7; // 기타 등등 return importantValue3 - 2 * importantValue1; } |
class Gamma ... private final Account _account; private int inputVal; private int quantity; private int yearToDate; private int importantValue1; private int importantValue2; private int importantValue3; Gamma(Account source, int inputValArg, int quantityArg, int yearToDateArg) { _account = source; inputVal = inputValArg; quantity = quantityArg; yearToDate = yearToDateArg; } int compute() { int importantValue1 = (inputVal * quantity) + _account.delta(); int importantValue2 = (inputVal * yearToDate) + 100; if ((yearToDate - importantValue1) > 100) importantValue2 -= 20; int importantValue3 = importantValue2 * 7; // 기타 등등 return importantValue3 - 2 * importantValue1; } |
class Account .... int gamma (int inputVal, int quantity, int yearToDate) { return new Gamma(this, inputVal, yearToDate).compute(); } |
Substitute Algorithm (1) | 2011.09.19 |
---|---|
Remove Assignments to Parameters (0) | 2011.09.19 |
Split Temporary Variable (0) | 2011.09.19 |
Introduce Explaining Variable (0) | 2011.09.19 |
Replace Temp with Query (0) | 2011.09.19 |
int discount (int inputVal, int quantity, int yearToDate) { if (inputVal > 50) inputVal -= 2; if (quantity > 100) inputVal -= 1; if (yearToDate > 10000) inputVal -= 4; return inputVal; } |
int discount (int inputVal, int quantity, int yearToDate) { int result = inputVal; if (inputVal > 50) result -= 2; if (quantity > 100) result -= 1; if (yearToDate > 10000) result -= 4; return result; } |
int discount (final int inputVal, final int quantity, final int yearToDate) { int result = inputVal; if (inputVal > 50) result -= 2; if (quantity > 100) result -= 1; if (yearToDate > 10000) result -= 4; return result; } |
Substitute Algorithm (1) | 2011.09.19 |
---|---|
Replace Method with Method Object (0) | 2011.09.19 |
Split Temporary Variable (0) | 2011.09.19 |
Introduce Explaining Variable (0) | 2011.09.19 |
Replace Temp with Query (0) | 2011.09.19 |
double temp = 2 * (_height + _width); System.out.println(temp); temp = _height * _width; System.out.println(temp); |
final double perimeter = 2 * (_height + _width); System.out.println(perimeter); final double area = _height * _width; System.out.println(area); |
Replace Method with Method Object (0) | 2011.09.19 |
---|---|
Remove Assignments to Parameters (0) | 2011.09.19 |
Introduce Explaining Variable (0) | 2011.09.19 |
Replace Temp with Query (0) | 2011.09.19 |
Inline Temp (0) | 2011.09.18 |
※ 복잡한 수식이 있는 경우에는, 수식의 결과나 또는 수식의 일부에 자신의 목적을 잘 설명하는 이름으로 된 임시변수를 사용하라.
※ 보통 Extract Method로 해결 - 임시변수는 한 메소드의 컨텍스트 내에서만 유용하지만 메소드는 객체의 모든 부분, 다른 객체에서도 유용
※ 지역변수 때문에 Extract Method의 사용이 어려운 경우 Introduce Explaining Variable 사용
※ 절차
1. final 변수를 선언하고, 복잡한 수식의 일부를 이 변수에 대입
2. 원래의 복잡한 수식에서, 임시변수에 대입한 수식을 임시변수로 바꾼다.
3. 컴파일 및 테스트
4. 수식의 다른 부분에 대해서도 위의 작업 반복
Before
double price() { // price = (base price) - (quantity discount) + (shipping); return _quantity * itemPrice - Math.max(0, _quantity - 500) * _itemPrice * 0.05 + Math.min(_quantity * itemPrice * 0.1, 100.0); } |
double price() { // price = (base price) - (quantity discount) + (shipping); final double basePrice = _quantity * itemPrice; return basePrice - Math.max(0, _quantity - 500) * _itemPrice * 0.05 + Math.min(_quantity * itemPrice * 0.1, 100.0); } |
double price() { // price = (base price) - (quantity discount) + (shipping); final double basePrice = _quantity * itemPrice; return basePrice - Math.max(0, _quantity - 500) * _itemPrice * 0.05 + Math.min(basePrice * 0.1, 100.0); } |
double price() { // price = (base price) - (quantity discount) + (shipping); final double basePrice = _quantity * itemPrice; final double quantityDiscount = Math.max(0, _quantity - 500) * _itemPrice * 0.05; final double shipping = Math.min(basePrice * 0.1, 100.0); return basePrice - quantityDiscount + shipping; } |
double price() { // price = (base price) - (quantity discount) + (shipping); return _quantity * itemPrice - Math.max(0, _quantity - 500) * _itemPrice * 0.05 + Math.min(_quantity * itemPrice * 0.1, 100.0); } |
double price() { // price = (base price) - (quantity discount) + (shipping); return basePrice() - quantityDiscount() + shipping(); } private double quantityDiscount() { return Math.max(0, _quantity - 500) * _itemPrice * 0.05 ; } private double shipping() { return Math.min(basePrice() * 0.1, 100.0); } private double basePrice() { return _quantity * itemPrice; } |
Remove Assignments to Parameters (0) | 2011.09.19 |
---|---|
Split Temporary Variable (0) | 2011.09.19 |
Replace Temp with Query (0) | 2011.09.19 |
Inline Temp (0) | 2011.09.18 |
Inline Method (0) | 2011.09.18 |
double getPrice() { int basePrice = _quantity * _itemPrice; double discountFactor; if (basePrice > 1000) discountFactor = 0.95; else discountFactor = 0.98; return basePrice * discountFactor; } |
double getPrice() { final int basePrice = _quantity * _itemPrice; final double discountFactor; if (basePrice > 1000) discountFactor = 0.95; else discountFactor = 0.98; return basePrice * discountFactor; } |
double getPrice() { final int basePrice = basePrice(); final double discountFactor; if (basePrice > 1000) discountFactor = 0.95; else discountFactor = 0.98; return basePrice * discountFactor; } private int basePrice() { return _quantity * _itemPrice; } |
double getPrice() { final int basePrice = basePrice(); final double discountFactor; if (basePrice() > 1000) discountFactor = 0.95; else discountFactor = 0.98; return basePrice * discountFactor; } private int basePrice() { return _quantity * _itemPrice; } |
double getPrice() { final double discountFactor; if (basePrice() > 1000) discountFactor = 0.95; else discountFactor = 0.98; return basePrice() * discountFactor; } private int basePrice() { return _quantity * _itemPrice; } |
double getPrice() { final double discountFactor = discountFactor(); return basePrice() * discountFactor; } private int basePrice() { return _quantity * _itemPrice; } private double discountFactor() { if (basePrice() > 1000) return 0.95; else return 0.98; } |
double getPrice() { return basePrice() * discountFactor(); } private int basePrice() { return _quantity * _itemPrice; } private double discountFactor() { if (basePrice() > 1000) return 0.95; else return 0.98; } |
Split Temporary Variable (0) | 2011.09.19 |
---|---|
Introduce Explaining Variable (0) | 2011.09.19 |
Inline Temp (0) | 2011.09.18 |
Inline Method (0) | 2011.09.18 |
Extract Method (0) | 2011.09.18 |
double basePrice = anOrder.basePrice(); return (basePrice > 1000); |
return (anOrder.basePrice() > 1000); |
Introduce Explaining Variable (0) | 2011.09.19 |
---|---|
Replace Temp with Query (0) | 2011.09.19 |
Inline Method (0) | 2011.09.18 |
Extract Method (0) | 2011.09.18 |
리팩토링으로 해결될 수 있는 문제가 있다는 징후 (0) | 2011.09.18 |
int getRating() { return (moreThanFiveLateDeliveries()) ? 2:1; } boolean moreThanFiveLateDeliveries() { return _numberOfLateDeliveries > 5 } |
int getRating() { return (_numberOfLateDeliveries > 5) ? 2:1; } |
Replace Temp with Query (0) | 2011.09.19 |
---|---|
Inline Temp (0) | 2011.09.18 |
Extract Method (0) | 2011.09.18 |
리팩토링으로 해결될 수 있는 문제가 있다는 징후 (0) | 2011.09.18 |
이클립스 리팩토링 단축키 (0) | 2011.09.17 |
void printOwing(double amount) { printBanner(); //상세 정보 표시 System.out.println("name:"+_name); System.out.println("amount:"+amount); } |
void printOwing(double amount) { printBanner(); printDetails(amount) } void printDetails(double amount) { System.out.println("name:"+_name); System.out.println("amount:"+amount); } |
Inline Temp (0) | 2011.09.18 |
---|---|
Inline Method (0) | 2011.09.18 |
리팩토링으로 해결될 수 있는 문제가 있다는 징후 (0) | 2011.09.18 |
이클립스 리팩토링 단축키 (0) | 2011.09.17 |
리팩토링이란? (0) | 2011.09.17 |