[Book] Refactoring: 2 리팩터링 원칙
리팩터링
출처: 리팩터링 2판, 마틴 파울러
02 리팩터링 원칙
page 79 ~ 111
2.1 리팩터링 정의
-
리팩터링: [명사] 소프트웨어의 겉보기 동작은 그대로 유지한 채, 코드를 이해하고 수정하기 쉽도록 내부 구조를 변경하는 기법
-
리팩터링(하다): [동사] 소프트웨어의 겉보기 동작은 그대로 유지한 채, 여러 가지 리팩터링 기법을 적용해서 소프트웨어를 재구성하다.
2.2 두 개의 모자
- 소프트웨어 개발할 때 목적이 ‘기능 추가’냐, 아니면 ‘리팩터링’이냐를 구분하는 것을 두 개의 모자
two hats
에 비유했다. 소프트웨어 개발하는 동안 두 모자를 바꿔 써 가며 작업한다.
2.3 리팩터링하는 이유
리팩터링하면 소프트웨어 설계가 좋아진다
리팩터링하면 소프트웨어를 이해하기 쉬워진다
리팩터링하면 버그를 쉽게 찾을 수 있다
리팩터링하면 프로그래밍 속도를 높일 수 있다
2.4 언제 리팩터링해야 할까?
3의 법칙 - 돈 로버츠
- 처음에는 그냥 한다.
- 비슷한 일을 두 번째로 하게 되면(중복이 생겼다는 사실에 당황스럽겠지만), 일단 계속 진행한다.
- 비슷한 일을 세 번째 하게 되면 리팩터링한다.
준비를 위한 리팩터링: 기능을 쉽게 추가하게 만들기
이해를 위한 리팩터링: 코드를 이해하기 쉽게 만들기
쓰레기 줍기 리팩터링
계획된 리팩터링과 수시로 하는 리팩터링
오래 걸리는 리팩터링
코드 리뷰에 리팩터링 활용하기
관리자에게는 뭐라고 말해야 할까?
리팩터링하지 말아야 할 때
내부 동작을 이해해야 할 시점에 리팩터링해야 효과를 제대로 볼 수 있다.
2.5 리팩터링 시 고려할 문제
새 기능 개발 속도 저하
리팩터링의 궁극적인 목적은 개발 속도를 높여서, 더 적은 노력으로 더 많은 가치를 창출하는 것 이다.
코드 소유권
코드 소유권이 나뉘어 있으면 리팩터링에 방해가 된다.
브랜치
지속적 통합과 리팩터링을 합쳐서 익스트림 프로그래밍이라고 하는데, 두 기법의 궁합이 잘 맞다.
테스팅
리팩터링 하기 위해서는 자가 테스트 코드를 마련해야 한다.
레거시 코드
레거시 시스템을 파악할 때 리팩터링이 굉장히 도움된다.
데이터베이스
2.6 리팩터링, 아키텍처, 애그니(YAGNI)
You aaren’t going to need it
2.7 리팩터링과 소프트웨어 개발 프로세스
자가 테스트 코드와 리팩터링을 묶어서 테스트 주도 개발이라 한다. 리팩터링의 첫 번째 토대는 자가 테스트 코드다.
2.8 리팩터링과 성능
리팩터링은 성능 좋은 소프트웨어를 만드는 데 기여한다. 단기적으로 보면 리팩터링 단계에서는 성능이 느려질 수도 있다. 하지만 최적화 단계에서 코드를 튜닝하기 훨씬 쉬워지기 떄문에 결국 더 빠른 소프트웨어를 얻게 된다.
2.9 리팩터링의 유래
2.10 리팩터링 자동화
2.11 더 알고 싶다면
리팩터링 연습에 주력한 책: 윌리엄 웨이크가 쓴 ‘리팩터링 워크북’(인사이트, 2006)
소프트웨어 패턴 + 리팩터링: 패턴을 활용한 리팩터링, 조슈아 케리에프스키(인사이트, 2011)
리팩터링 데이터베이스
리팩터링 HTML
레거시 코드 활용 전략
Refactoring: Ruby Edition