2011년 5월 26일 목요일

Replace Method with Method Object

class Order...
double price() {
double primaryBasePrice;
double secondaryBasePrice;
double tertiaryBasePrice;
// long computation;
...
}



긴 메소드가 있는데, 지역변수 때문에 Extract Method를 적용할 수 없는 경우에는 메소드를 그 자신을 위한 객체로 바꿔서 모든 지역변수가 그 객체의 필드가 되도록 한다. 이렇게 하면 메소드를 같은 객체 안의 여러 메소드로 분해 할 수 있다.

! 동기

- 지역변수는 메소드를 분해할 때 어려움을 준다. 즉 지역변수가 많으면 분해가 어려워진다.

- Replace Temp with Query는 이런 짐을 덜도록 도와주지만, 때로는 쪼개야 하는 메소드를 쪼갤 수 없는 경우가 생길 수도 있다.

- 이것은 아주 중요한 리팩토링이다. 이 리팩토링의 이점은 compute메소드에서 파라미터를 넘겨주는 것에 대한 걱정 없이 쉽게 Extract Method를 사용할 수 있다는 것이다.

! 절차

- 메소드 이름을 따서 새로운 클래스를 만든다.

- 새로운 클래스에 원래 메소드가 있던 객체를 보관하기 위한 final필드를 하나 만들고, 메소드에 사용되는 임시변수와 파라이터를 위한 필드를 만들어준다.

- 새로운 클래스에 소스객체와 파라미터를 취하는 생성자를 만들어준다.

- 새로운 클래스에 compute라는 이름의 메소드를 만들어준다.

- 원래의 메소드를 compute메소드로 복사한다. 원래의 객체에 있는 메소드를 사용하는 경우에는 소스 객체 필드를 사용하도록 바꾼다.

- 새로운 클래스의 객체를 만들고 원래의 메소드를 새로 만든 객체의 compute 메소드를 호출하도록 바꾼다.

! 관련 리펙토링

댓글 없음:

댓글 쓰기

ETL 솔루션 환경

ETL 솔루션 환경 하둡은 대용량 데이터를 값싸고 빠르게 분석할 수 있는 길을 만들어줬다. 통계분석 엔진인 “R”역시 하둡 못지 않게 관심을 받고 있다. 빅데이터 역시 데이터라는 점을 볼때 분산처리와 분석 그 이전에 데이터 품질 등 데이...