객체 간 이동이 가능한 상황 및 상황별 리팩토링 기법
메서드 이동 (Move Method)
동기언제 적용하는게 좋을까?
어떤 이점을 가져올 수 있을까?
방법
예제
리팩토링 목표
필드 이동 (Move Field)
동기언제 적용하는게 좋을까?
방법
예제
리팩토링 목표
필드 캡슐화 (Encapsulate Field)
필드 자체 캡슐화 (Self Encapsulate Field) 많은 메서드가
동기클래스는 확실하게 추상화 되어야하며, 두세 가지의 명확한 기능을 담당해야 함 방대한 클래스
어느 부분에 적용해야 하나?
판단 방법 방법
예제
리팩토링 목표
클래스 공개시 객체 변경에 대처 방식
클래스 내용 직접 삽입 (Inline Class)
동기클래스 내용 직접(Inline Class) 와 클래스 추출(Extract Class)는 반대 개념 적용 대상 클래스의 대부분의 기능이 리팩토링을 통해서 다른 곳으로 옮겨져 클래스가 더이상 존재할 이유가 없어진 클래스 방법
예제
리팩토링 목표
대리 객체 은폐 (Hide Delegate)
동기캡슐화란 객체가 시스템의 다른 부분에 대한 정보를 일부분만 알 수 있도록 함
방법
예제
리팩토링 목표
과잉 중개 메서드 제거 (Remove Middle Man)
동기대리 객체 은폐(Hide Delegate) 와 과잉 중개 메서드 제거(Remove Middle Man) 은 반대 개념 대리 객체의 캡슐화는 많은 장점을 가지지만, 적절한 은폐의 정도
방법
예제
리팩토링 목표
일부 클라이언트에서는 위임 메서드를 그대로 사용하고 일부 클라이언트에서는 대리 객체를 사용할 경우도 있을 수 있으므로 외래 클래스에 메서드 추가 (Introduce Foreign Method)
동기
방법
예제
리팩토링 목표
국소적 상속확장 클래스 사용 (Introduce Local Extension)
동기원본 클래스의 수정이 불가능할 때 필요한 메서드가 한 두개라면 외래 클래스에 메서드 추가(Introduce Foreign Method) 기법을 실시 해결을 위한 방법: 하위클래스화(subclassing) + 래퍼화(wrapping) → 국소적 상속확장 클래스(Local Extension) 국소적 상속확장 클래스는 별도의 클래스이지만 원본 클래스의 하위타입이므로, 원본 클래스의 모든 기능을 사용할 수 있으면서 추가 기능도 사용할 수 있게 됨 → 원본 클래스를 사용하는 게 아니라 국소 상속확장 클래스를 사용하게 됨 사용하면 얻을 수 있는 이점 메서드와 데이터가 체계적으로 묶여야 한다는 원칙이 지켜짐 하위클래스(subclass)
래퍼클래스(wrapper)
방법
예제
C# 의 확장 메서드
|