: 외부에서 보는 프로그램 동작은 바꾸지 않고 프로그램의 내부 구조를 개선하는 것.
-> 리팩토링을 해도 동작이 변하면 안된다.
: 프로그램에서 리팩토링이 필요한 부분을 '악취'가 난다고 표현한다.
- 중복 코드
- 너무 긴 메서드
- 방대한 클래스
- 과다한 매개변수
- 사양 변경이 있을 때 수정 내용이 곳곳에 흩어져 있을 때
- 어떤 클래스를 수정하면 다른 클래스도 수정해야할 때
- 언제나 다른 클래스 내용을 수정하는 클래스가 있을 때
- 합쳐서 다뤄야 할 데이터가 한 클래스에 모여있지 않을 때
- 클래스를 만들지 않고 기본 타입만 사용할 때
- switch 문이나 if문으로 동작을 나눌 때
- 평행 상속
- 클래스가 하는일이 별로 없을 때
- 의심스러운 일반화
- 임시 속성
- 메서드 호출 연쇄가 너무 많을 때
- 맡기기만 하고 자신은 일하지 않은 클래스가 있을 때
- 그럴 필요가 없는데 양방향 링크를 걸거나 IS_A 관계가 없는데 상속을 할 때
- 클래스 인터페이스 불일치
- 불안전한 라이브러리 클래스
- 데이터 클래스
- 상속 거부
- 주석
public static final int MAX_INPUT_LENGTH = 100;
public static final int WORK_LENGTH = MAX_INPUT_LENGTH * 2
제어플래그란?
: 상태를 기록하고 처리 흐름을 제어하기 위한 boolean 타입 변수
제어플래그를 삭제하는 대신 break, continue, return 을 이용하다.
클래스는 하나에 책임 하나가 이상적이다.참고
자바로 배우는 리팩토링 입문(책)