* Duplicated Code (중복된 코드)
- 한 클래스의 서로 다른 두 메소드 안에 같은 코드가 있는 경우 : Extract Method
- 동일한 수퍼클래스를 갖는 두 서브클래스에서 같은 코드가 나타나는 경우 : Extract Method, Pull Up Method, Form Template Method, Substitute Algorithm
- 관계가 없는 두 클래스에서 중복된 코드가 있는 경우 : Extract Class
* Long Method (긴 메소드)
- 주석이 있는 부분 : Extract Method
- 조건문과 루프가 있는 경우 : Decompose Conditional
* Large Class (거대한 클래스)
- 많은 변수가 있는 경우 : Extract Class
- 클래스가 모든 인스턴스 변수를 사용하지 않는 경우 : Extract Class, Extract Subclass
- 코드가 많은 클래스 : Extract Class, Extract Subclass
- GUI 클래스 인 경우 : Duplicate Observed Data
* Long Parameter List (긴 파라미터 리스트)
- 객체에 요청하여 파라미터의 데이터를 얻을 수 있는 경우 : Replace Parameter with Method
- 한 객체로부터 주워 모은 데이터 뭉치를 그 객체 자체로 바꿀 수 있는 경우 : Perserve Whole Object
- 객체와 관계 없는 여러 개의 데이터 아이템이 있는 경우 : Introduce Parameter Object
- 파라미터 리스트가 지나치게 길거나 자주 변경되는 경우 : 종속성 구조(dependency structure)를 생각해 볼 필요가 있다
* Divergent Change (확산적 변경) : 한 클래스가 다른 이유로 인해 다른 방법으로 자주 변경되는 경우
- Extract Class
* Shotgun Surgery (산탄총 수술) : 변경을 할 때마다 많은 클래스를 조금씩 수정해야 하는 경우
- Move Method, Move Field
- 기존의 클래스 중에서 메소드나 필드가 옮겨갈 적절한 후보가 없다면 새로 하나를 만들어라
- Inline Class
* Feature Envy (기능에 대한 욕심)
- 어떤 값을 계산하기 위해 다른 객체에 있는 여러 개의 get 메소드를 호출하는 경우 : Move Method
- 메소드의 특정 부분만 해당하는 경우 : Extract Method, Move Method
* Data Clump (데이터 덩어리)
- 함께 몰려다니는 데이터의 무리 : Extract Class, Introduce Parameter Object, Preserve Whole Object
* Primitive Obsession (기본 타입에 대한 강박관념)
* Switch statement (Switch 문)
* Parallel Inheritance Hierarchies (평행 상속 구조)
* Lazy Class (게으른 클래스)
* Speculative Generality (추측성 일반화)
* Temporary Field (임시 필드)
* Message Chains (메세지 체인)
* Middle Man (미들 맨)
* Inappropriate Intimacy (부적절한 친밀)
* Alternative Classes with Different Interface (다른 인터페이스를 가진 대체 클래스)
* Imcomplete Library Class (불완전한 라이브러리 클래스)
* Data Class (데이터 클래스)
* Refused Bequest (거부된 유산)
* Comments (주석)
내일 이어서...
'programming' 카테고리의 다른 글
ruby : 특정 정규식을 통해 match되는 데이터들 찾기 (0) | 2006.01.12 |
---|---|
디자인 패턴 공부 할 때 도움 되는 사이트 (Design Pattern) (2) | 2004.09.13 |
언제 리펙토링을 해야 하는가? 와 언제 하지 말아야 하는가? (4) | 2004.04.27 |