메소드 몸체가 메소드의 이름만큼이나 명확할때는
호출하는 곳에 메소드의 몸체를 넣고, 메소드를 삭제하라
동기
절차
int getRating() { return (moreThanFiveLateDeliveries()) ? 2 : 1; } boolean moreThanFiveLateDeliveries() { return _numberOfLateDeliveries > 5; }
int getRating() { return (_numberOfLateDeliveries > 5) ? 2 : 1; }
동기
- 이럴때는 메소드를 제거한다.
- 때로는 메소드의 몸체가 메소드의 이름만큼이나 명확할때가 있다.
- 메소드의 몸체를 메소드의 이름만큼이나 명확하게 리팩토링 할수도 있다.
- 필요없는 인디렉션은 짜증나게 한다
- 메소드가 잘못 나뉘어졌을때
- 메소드를 다시 합쳐 하나의 큰 메소드로 만든 다음 다시 메소드 추출 ==> Replace Method with Method Object 를 사용하기 전에 이 방법 쓰면 좋다(Beck)
- 메소드 객체가 포함하고 있어야할 동작을 가지 메소드에 의해 호출되는 여러 메소드를 인라인화 한다.
- 메소드와 그 메소드가 호출하는 다른 여러 메소드를 옮기는 것보다는 메소드 하나만 옮기는 것이 더 쉽다.
- 너무 많은 인디렉션이 사용되어 모든 메소드가 단순히 다른 메소드에 위임을 하고 있어 그 인디렉션 속에서 길을 잃을 염려가 있을때
절차
- 메소드가 다형성을 가지고 있지 않은지 확인한다
- 서브 클래스에서 오버라이드하고 있는 메소드에는 적용하지 않는다
- 수퍼클래스에 없는 메소드를 서브클래스에서 오버라이드 할수는 없다
- 메소드를 호출하고 있는 부분을 모두 찾는다
- 각각의 메소드 호출을 메소드 몸체로 바꾼다
- 컴파일과 테스트를 한다
- 메소드 정의를 제거한다.
- Inline Method가 간단한가?
- 일반적으로 그리 간단하지 않다
- 재귀가 사용되는 경우나 리턴 포인트가 여러 곳인 경우에 어떻게 하고 접근자가 없을때는 어떻게 다른 객체로 인라인화 하는지...
- 이러면 하지 마라!
'프로그램언어 > Refactoring' 카테고리의 다른 글
[ Refactoring ] Split Temporary Variable (2) | 2010.12.01 |
---|---|
[ Refactoring ] Introduce Explaing Variable (0) | 2010.11.29 |
[ Refactoring ] Replace Temp with Query Method (0) | 2010.11.29 |
[ Refactoring ] Inline Temp (0) | 2010.11.24 |
[Refactoring] Extract Method (0) | 2010.11.23 |