[Refactoring] 구린내와 탈취 기법
구린내와 탈취 기법
| 구린내 | 탈취를 위한 리팩토링 기법 |
|---|---|
| swich문 | 조건문을 재정의로 전환,분류 부호를 하위클래스로 전환, 분류 부호를 상태/전략 패턴으로 전환, 매개변수를 메서드로 전환, Null 검사를 널 객체에 위임 |
| 강박적 기본 타입 사용 | 데이터 값을 객체로 전환, 클래스 추출, 매개변수 세트를 객체로 전환, 배열을 객체로 전환, 분류 부호를 하위클래스로 전환, 분류 부호를 상태/전략 패턴으로 전환 |
| 과다한 매개변수 | 매개변수 세트를 메서드로 전환, 매개변수 세트를 객체로 전환, 객체를 통째로 전달 |
| 과잉 중개 메서드 | 과잉 중개 메서드 제거, 메서드 내용 직접 삽입, 위임을 상속으로 전환 |
| 기능의 산재 | 메서드 이동, 필드 이동, 클래스 내용 직접 삽입 |
| 데이터 뭉치 | 클래스 추출, 매개변수 세트를 객체로 전환, 객체를 통째로 전달 |
| 데이터 클래스 | 메서드 이동, 필드 캡슐화, 컬렉터 캡슐화 |
| 막연한 범용 코드 | 계층 병합, 클래스 내용 직접 삽입, 매개변수 제거, 메서드명 변경 |
| 메시지 체인 | 대리 객체 은폐 |
| 미흡한 라이브러리 클래스 | 외래 클래스에 메서드 추가, 국소적 상속확장 클래스 사용 |
| 방대한 클래스 | 클래스 추출, 하위클래스 추출, 인터페이스 추출, 데이터 값을 객체로 전환 |
| 방치된 상속물 | 상속을 위임으로 전환 |
| 불필요한 주석 | 메서드 추출, 어설션 넣기 |
| 수정의 산발 | 클래스 추출 |
| 인터페이스가 다른 대용 클래스 | 메서드명 변경, 메서드 이동 |
| 임시 필드 | 클래스 추출, Null 검사를 널 객체에 위임 |
| 잘못된 소속 | 메서드 이동, 필드 이동, 메서드 추출 |
| 장황한 메서드 | 메서드 추출, 임시변수를 메서드 호출로 전환, 메서드를 메서드 객체로 전환, 조건문 쪼개기 |
| 중복코드 | 메서드 추출, 클래스 추출, 메서드 상향, 템블릿 메서드 형성 |
| 지나친 관여 | 메서드 이동, 필드 이동, 클래스의 양방향 연결을 단방향으로 전환, 상속을 위임으로 전환, 대리 객체 은폐 |
| 직무유기 클래스 | 클래스 내용 직접 삽입, 계층 병합 |
| 평행 상속 계층 | 메서드 이동, 필드 이동 |