리팩토링
-
리팩토링 : Replace Parameter with Method리팩토링 2013. 2. 13. 09:00
조건객체가 메소드를 호출하고, 결과를 다른 메소드에 대한 파라메터로 반환하고,수신자가 또한 이 메소드를 호출한다면. 적용그 파라메터를 제거하고 수신자가 메소드를 호출하도록 만드시오. 적용전 int basePrice = _quantity * _itemPrice; discountLevel = getDiscountLevel(); double finalPrice = discountedPrice (basePrice, discountLevel); 적용후 int basePrice = _quantity * _itemPrice; double finalPrice = discountedPrice (basePrice); 참조http://www.refactoring.com/catalog/replaceParameterWithMe..
-
리팩토링 : Replace Parameter with Explicit Methods리팩토링 2013. 2. 12. 22:32
조건열거형 파라메터의 값에 따라 다른 코드를 실행하는 메소드가 있다면 적용파라메터의 각 값에 해당하는 분리된 메소드를 만드시오. 적용전 void setValue (String name, int value) { if (name.equals("height")) { _height = value; return; } if (name.equals("width")) { _width = value; return; } Assert.shouldNeverReachHere(); } 적용후 void setHeight(int arg) { _height = arg; } void setWidth (int arg) { _width = arg; } 참조http://www.refactoring.com/catalog/replaceParam..
-
리팩토링 : Replace Nested Conditional with Guard Clauses리팩토링 2013. 2. 11. 09:00
조건메소드가 정상실행경로가 명확하지 않은 조건별 행동을 하고 있다면적용모든 특정 경우에 보호구문(Guard Clause)을 사용하시오. 적용전 double getPayAmount() { double result; if (_isDead) result = deadAmount(); else { if (_isSeparated) result = separatedAmount(); else { if (_isRetired) result = retiredAmount(); else result = normalPayAmount(); }; } return result; }; 적용후 double getPayAmount() { if (_isDead) return deadAmount(); if (_isSeparated) retur..
-
리팩토링 : Replace Method with Method Object리팩토링 2013. 2. 10. 09:00
조건Extract Method를 적용할수 없는 지역 변수를 사용하는 긴 메소드가 있다면 적용해당 메소드를 객체안으로 옮겨서 모든 지역변수들을 그 객체의 필드가 되게 하시오.그리고나서 해당 메소드를 같은 객체내의 다른 메소드들로 분해해 넣을수 있습니다. 적용전 class Order... double price() { double primaryBasePrice; double secondaryBasePrice; double tertiaryBasePrice; // long computation; ... } 적용후 참조http://www.refactoring.com/catalog/replaceMethodWithMethodObject.html
-
리팩토링 : Replace Magic Number with Symbolic Constant리팩토링 2013. 2. 9. 09:00
조건특별한 의미를 가지는 숫자 값을 직접사용하고 있다면 적용해당 숫자값의 의미를 나타내는 이름을 가진 상수를 만들어서 대체하시오. 적용전 double potentialEnergy(double mass, double height) { return mass * height * 9.81; } 적용후 double potentialEnergy(double mass, double height) { return mass * GRAVITATIONAL_CONSTANT * height; } static final double GRAVITATIONAL_CONSTANT = 9.81; 참조http://www.refactoring.com/catalog/replaceMagicNumberWithSymbolicConstant.html
-
리팩토링 : Replace Iteration with Recursion리팩토링 2013. 2. 8. 09:00
작자 : Dave Whipp 조건루프가 있는데 각 반복이 어떤걸 하는지 명확하지 않다면적용재귀호출하는 반복으로 대체하시오. 적용전 unsigned greatest_common_divisor (unsigned a, unsigned b) { while (a != b) { if (a > b) { a -= b; } else if (b > a) { b -= a; } } } 적용후 unsigned greatest_common_divisor (unsigned a, unsigned b) { if (a > b) { return greatest_common_divisor ( a-b, b ); } else if (b > a) { return greatest_common_divisor ( a, b-a ); } else // ..
-
리팩토링 : Replace Exception with Test리팩토링 2013. 2. 6. 09:00
조건호출자가 처음 확인하는 조건에서 예외를 던지고 있다면 적용해당 호출자가 테스트를 먼저하도록 변경하시오. 적용전 double getValueForPeriod (int periodNumber) { try { return _values[periodNumber]; } catch (ArrayIndexOutOfBoundsException e) { return 0; } } 적용후 double getValueForPeriod (int periodNumber) { if (periodNumber >= _values.length) return 0; return _values[periodNumber]; } 참조http://www.refactoring.com/catalog/replaceExceptionWithTest.html