참고도서 : 리팩토링 (마틴 파울러 지음)
리팩토링은 외부동작을 바꾸지 않으면서 내부 구조를 개선하는 방법으로, 소프트웨어 시스템을 변경하는 프로세스이다.
소프트웨어를 보다 이해하기 쉽고, 수정하기 쉽도록 만드는 것, 겉으로 보이는 소프트웨어의 기능을 변경하지 않는 것이다.
따라서, 리팩토링을 할 때는 기능을 추가해서는 안되고, 단지 코드의 구조에만 신경 써야한다.
리팩토링은 가동중인 프로그램을 취해서, 동작을 바꾸는 것이 아니라 우리가 빠른 속도로 개발할 수 있도록 하는 특성을 좀더 많이 주어, 프로그램의 가치를 높이는 것이다.
리팩토링을 위해 별도의 시간을 내는 것은 좋지 않다.
리팩토링 자체를 목적으로 삼는 것이 아니라, 어떤 다른 것을 하기 위해 리팩토링을 하는 것이고, 리팩토링은 그 다른 것을 하는데 도움을 준다.
대부분의 비즈니스 애플리케이션은 데이터베이스 스키마와 밀접하게 결합되어 있다. 데이터베이스 스키마와 객체 모델간의 종속(Dependency)를 최소화하기 위해 계층구조로 만들었다 하더라도, 스키마를 변경하려면 데이터를 마이그레이트 해야 하는데, 시간도 오래 걸리고 위험도 큰 작업이다
기존 코드가 너무 엉망이라 처음부터 다시 시작하는 것이 더 쉬운 경우가 있다. 하지만 이런 결정은 쉽게 내릴 수 없고, 가이드 라인도 없다.
중복된 코드 (Duplicated Code)
긴 메소드 (Long Method)
거대한 클래스 (Large Class)
긴 파라미터 리스트 (Long Parameter List)
확산적 변경 (Divergent Change)
산탄총 수술 (Shotgun Surgery)
기능에 대한 욕심 (Feature Envy)
데이터 덩어리 (Data Clump)
기본 타입에 대한 강밥관념 (Primitive Obsession)
Switch 문 (Switch Statements)
평행 상속 구조 (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)
출처 : http://codereview.tistory.com/3