Refactoring
Chapter 2. 리펙터링 원칙
리팩터링 정의
[명사] '소프트웨어의 겉보기 동작은 그대로 유지한 채, 코드를 이해하고 수정하기 쉽도록 내부 구조를 변경하는 기법'
[동사] '소프트웨어의 겉보기 동작은 그대로 유지한 채, 여러 가지 리팩터링 기법을 적용해서 소프트웨어를 재구성하다.'
- 리팩터링하면- 소프트웨어 설계가 좋아진다
- 소프트웨어를 이해하기 쉬워진다 (버그를 찾기 쉬워진다)
- 버그를 쉽게 찾을 수 있다
- 프로그래밍 속도를 높일 수 있다
 
'보기 싫은 코드를 발견하면 리팩터링하자. 그런데 잘 작성된 코드 역시 수많은 리팩터링을 거쳐야 한다.''
언제 리팩터링해야 할까?
- 준비를 위한 리팩터링 : 기능을 쉽게 추가하게 만들기
- 이해를 위한 리팩터링 : 코드를 이해하기 쉽게 만들기
- 쓰레기 줍기 리팩터링
- 계획된 리팩터링과 수시로 하는 리팩터링
- 오래 걸리는 리팩터링
- 코드 리뷰에 리팩터링 활용하기
리팩터링 시 고려할 문제
- 새 기능 개발 속도 저하- 리팩터링은 개발 기간을 단축하고자 하는 것이다.
- 기능 추가 시간을 줄이고, 버그 수정 시간을 줄여준다.
 
- 코드 소유권- 코드 소유권을 팀에 두는 것을 선호한다.
 
- 브랜치- 팀원마다 코드베이스의 branch를 하나씩 맡아서 작업하다 결과물이 쌓이면 master branch에 통합해서 공유하자. (지속적 통합 적용, CI)
 
- 테스팅- 자가 테스트 코드를 갖추자.
 
- 레거시 코드- 테스트를 보강하자.
 
- 데이터베이스
리팩터링과 성능
리팩터링은 성능 좋은 소프트웨어를 만드는 데 기여한다.
빠른 소프트웨어를 작성하는 방법
- 시간 예산 분배 방식- 설계를 여러 컴포넌트로 나눠서 컴포넌트마다 자원 예산을 할당
 
- 끊임없이 관심을 기울이자
- 의도적으로 성능 최적화에 돌입하기 전까지 성능에 신경 쓰지 않고 코드를 다루기 쉽게 만드는 데 집중하자.
리펙터링과 최적화의 관계
- 리팩터링을 잘 해두면 서능 튜닝에 투입할 시간을 벌 수 있다.
- 리팩터링이 잘 되어 있는 프로그램은 성능을 더 세밀하게 분석할 수 있다.