리팩터링 워크북 2장 "리팩터링 사이클" 정리 입니다.
리팩터링이란 무엇인가?
리팩터링은 기존 코드의 디자인을 안전하게 개선하는 기술이다. 이 말에는 다음과 같은 의미가 내포되어 있다.
- 시스템 내에서 발생하는 변경 사항이 모두 리팩터링에 포함되는것은 아니다.
리팩터링이 새로운 코드를 추가하는 과정의 일부는 될 수 있지만, 새로운 기능을 추가하기 위한 과정은 아니다.
- 리팩터링이란 처음부터 다시 작성하는 것이 아니다.
리팩터링은 기존 코드에 있는 지식을 보존한다.
- 코드를 개선하기 위한 개조라고 해서 모두 리팩터링은 아니다.
리팩터링은 안전한 변형을 위해 노력한다는 점에서 일반적인 코드 개선과 구별된다.
- 리팩터링은 선행(up-front)디자인과 창발(emergent) 디자인 사이에서 균형점을 변경한다.
- 리팩터링은 크기가 작을 수도 있고 클 수도 있다.
이상적으로는, 큰 리팩터링이 거의 필요하지 않을 정도로 작은 리팩터링을 '무자비하게' 사용하는 것이 좋다.
리팩터링 사이클
1. 작업 프로그램을 시작한다.
2. 냄새가 남아 있는 동안 다음을 수행한다.
가장 나쁜 냄새를 골라낸다.
그 냄새를 겨냥할 리팩터링을 선택한다.
선택한 리팩터링을 적용한다.
전체 프로세스중 가장 까다로운 부분은 냄새를 식별하는 것이다.
단순한 디자인
1. 모든 테스트를 실행할 수 있어야 한다.
2. 중복된 로직이 없어야 한다. 병렬 클래스 계층구조와 같은 숨은 중복에 주의해야 한다.
3. 프로그래머들에게 중요한 모든 의도를 알려줄 수 있어야 한다.
4. 클래스와 메서드는 가능한 적어야 한다.