Refactoring
-
리팩토링 : Replace Error Code with Exception리팩토링 2013. 2. 5. 09:00
조건메소드가 에러대신에 특정 코드를 반환한다면적용대신에 예외를 던지시오. 적용전 int withdraw(int amount) { if (amount > _balance) return -1; else { _balance -= amount; return 0; } } 적용후 void withdraw(int amount) throws BalanceException { if (amount > _balance) throw new BalanceException(); _balance -= amount; } 참조http://www.refactoring.com/catalog/replaceErrorCodeWithException.html
-
리팩토링 : Replace Constructor with Factory Method리팩토링 2013. 2. 2. 22:30
조건객체를 생성할때 간단한 생성자 이외의 것을 원한다면 적용생성자말고 팩토리(factory) 메소드를 이용하시오. 적용전 Employee (int type) { _type = type; } 적용후 static Employee create(int type) { return new Employee(type); } 참조http://www.refactoring.com/catalog/replaceConstructorWithFactoryMethod.html
-
리팩토링 : Replace Conditional with Visitor리팩토링 2013. 2. 1. 09:00
작자 : Ivan Mitrovic 조건객체의 타입에 따라 다른 행동을 하는게 반복되고 이런 코드가 곳곳에 있는 '공격적인(aggressive)' 조건이 있다면 적용조건의 각 데이터 타입에 따른 접근가능한(Visitable) 객체의 구체적인 인스턴스를 생성하시오.각 조건의 로직을 캡슐화하느 방문자(Visitor)의 구체적인 인스턴스를 생성하시오. 방문자(Visitor)에 의해 접근가능한(Visitatble) 객체에 접근하시오. 참조http://www.refactoring.com/catalog/replaceConditionalWithVisitor.htmlhttp://www.refactoring.com/catalog/replaceConditionalWithVisitor.pdf
-
리팩토링 : Replace Conditional with Polymorphism리팩토링 2013. 1. 31. 22:30
조건객체의 타입에 따라서 다른 행동을 하는 조건이 있다면 적용각 조건의 내용을 서브클래스의 메소드로 오버라이딩하도록 옮기고,원본 메소드는 추상메소드로 변경하시오. 적용전 double getSpeed() { switch (_type) { case EUROPEAN: return getBaseSpeed(); case AFRICAN: return getBaseSpeed() - getLoadFactor() * _numberOfCoconuts; case NORWEGIAN_BLUE: return (_isNailed) ? 0 : getBaseSpeed(_voltage); } throw new RuntimeException ("Should be unreachable"); } 적용후 참조http://www.refactor..
-
리팩토링 : Replace Array with Object리팩토링 2013. 1. 29. 22:29
조건일부 요소가 다른것을 의미하는 배열이 있다면적용해당 배열을 각 요소에 대한 필드를 가지는 객체로 대체하시오. 적용전 String[] row = new String[3]; row [0] = "Liverpool"; row [1] = "15"; 적용후 Performance row = new Performance(); row.setName("Liverpool"); row.setWins("15"); 참조http://www.refactoring.com/catalog/replaceArrayWithObject.html