이 책에서 소개된 규칙
- 다섯중 제한
- 호출 또는 전달 한가지만 할것
- if문은 함수의 시작에만 배치
- if문은 else를 사용하지 말것
- switch를 사용하지 말것
- 인터페이스에서만 상속 받을것
- 순수 조건 사용
- 구현체가 하나뿐인 인터페이스를 만들지 말것
- getter/setter를 사용하지 말것
- 공통 접사를 사용하지 말것
1장: 리팩터링 리팩터링하기
코드 스멜과 단위테스트를 가지고 리팩터링을 학습하는 방법은 진입 장벽이 너무 높다
리팩터링이란 무엇인가?
기능을 변경하지 않고 코드를 변경하는것
리팩터링을 해야 하는 이유
- 코드를 더 빠르게 만들기 위해
- 더 작은 코드를 만들기 위해
- 코드를 더 일반적이거나 재사용 가능하게 하기 위해
- 코드의 가독성을 높이고 유지보수를 용이하게 하기 위해
좋은코드 - 사람이 읽기 쉽고 유지보수가 용이하며 의도한 대로 잘 동작하는 코드
스킬: 무엇을 리팩터링할 것인가?
리팩터링은 코드 스멜과 함꼐 가르친다 하지마 코드스멜은 보는 감각을 키우는데 시간이 걸린다
문화: 리팩터링은 언제 할까?
리팩터링은 샤워와 같다 - 켄트 백
탐색 - 명세화 - 구현 - 테스트 - 리팩터링 - 전달
레거시 시스템에서의 리팩터링
우선 변경하기 쉽게 만든 후 변경 하라 - 켄트 백
언제 리팩터링을 하지 말아야 할까?
- 한 번 실행하고 삭제할 코드 - xp 에서 스파이크로 알려진것
- 폐기되기 전 유지보수 모드에 있는 코드
- 임베디드 시스템이나 게임의 고급 물리엔진과 같인 엄격한 성능 요구사항이 있는 코드
도구: (안전한) 리팩터링 방법
- 레시피처럼 상세하고 단계별로 구조화된 리팩터링 패턴
- 버전관리
- 컴파일러