-
참고자료
http://refactoring.guru/introduce-foreign-method
Introduce Foreign Method
Tired of reading? No wonder, it takes 7 hours to read all of the text we have here. Try our interactive course on refactoring. It offers a less tedious approach to learning new stuff. Let's see...
refactoring.guru
https://refactoring.guru/introduce-local-extension
Introduce Local Extension
Tired of reading? No wonder, it takes 7 hours to read all of the text we have here. Try our interactive course on refactoring. It offers a less tedious approach to learning new stuff. Let's see...
refactoring.guru
Introduce Foreign Method 정의
클래스에서 필요한 함수가 포함되어 있지 않은 상태이고 클래스에 함수를 추가할 수 없는 상태에서
클래스에 필요한 함수를 추가하고 클래스의 개체를 인수로 전달하는 기법.
예시
class Report { // ... void sendReport() { Date nextDay = new Date(previousEnd.getYear(), previousEnd.getMonth(), previousEnd.getDate() + 1); // ... } }
리팩토링 예시
class Report { // ... void sendReport() { Date newStart = nextDay(previousEnd); // ... } private static Date nextDay(Date arg) { return new Date(arg.getYear(), arg.getMonth(), arg.getDate() + 1); } }
Introduce Local Extension 정의
유틸리티 클래스에서 필요한 함수가 포함되어 있지 않은 상태이고 클래스에 함수를 추가할 수 없는 상태에서
함수를 포함하는 새 클래스를 만들고 유틸리티 클래스의 자식 또는 래퍼로 만든다.
사용중인 클래스에 필요한 함수가 없을 때가 있는데 더 나쁜 상황은 이러한 메서드를 추가 할 수 없다는 것입니다.
(예 : 클래스가 타사 라이브러리에 있기 때문)
해결책엔 두 가지 방법이 있습니다.
- 함수를 포함하고 부모 클래스에서 다른 모든 것을 상속하는 관련 클래스에서 하위 클래스를 만듦.
이 방법은 더 쉽지만 때때로 유틸리티 클래스 자체에 의해 차단된다. (최종 때문에). - 모든 새 함수를 포함하는 래퍼 클래스를 만들고 다른 곳에서 유틸리티 클래스의 관련 개체로 위임한다.
이 함수는 래퍼와 유틸리티 개체 사이의 관계를 유지하기위한 코드뿐만 아니라 유틸리티 클래스의 공용 인터페이스를 에뮬레이트하기 위해 많은 수의 간단한 위임 함수가 필요하기 때문에 더 많은 작업이 필요하다.
문제
해결책
반응형'Programming > 리팩토링' 카테고리의 다른 글
데이터 구성 : Replace Data Value with Object (0) 2020.09.07 데이터 구성 : Self Encapsulate Field (0) 2020.09.06 객체 간 기능 이동 : Extract Class, Inline Class (0) 2020.09.05 객체 간 기능 이동 : Move Method, Move Field (0) 2020.09.05 메소드 정리 : Replace Method with Method Object (0) 2020.09.04 - 함수를 포함하고 부모 클래스에서 다른 모든 것을 상속하는 관련 클래스에서 하위 클래스를 만듦.