리팩터링 정의
- [명사] 소프트웨어의 겉보기동작은 그대로 유지한채, 코드를 이해하고 수정하기 쉽도록 변경하는 기법
- [동사] 소프트웨어의 겉보기 동작은 그대로 유지한 채, 여러 가지 리팩터링 기법을 적용하여 소프트웨어를 재 구성한다.
- 리팩터링하기 전 후의 코드가 똑같이 작동해야한다.
두개의 모자
- 소프트웨어를 개발하는 동안은 기능추가를 하느냐 리팩터링을 하느냐에 따라 모자를 바꿔써야한다.
- 기능추가 할때는 기능추가만 하고, 리팩터링할때는 리팩터링만 해야한다는 원칙이다.
리팩터링 하는 이유?
- 리팩터링이 모든 문제를 해결하는 만병통치는 아니지만 건강한 상태로 유지하는데는 훌륭한 기법이다.
소프트웨어 설계가 좋아진다.
- 리팩터링하지 않으면 소프트웨어의 내부 설계가 복잡해진다.
- 아키텍쳐를 충분히 이해하지 못하고 성능위주의 코딩을 하면 설계를 파악하기 힘들다. 그러므로 중복코드를 제거해야한다.
소프트웨어의 이해가 쉽다.
- 다른사람 뿐만 아니라 내가 코드를 다시볼때 수정이 쉬워야 한다.
버그를 쉽게 찾는다.
- 코드를 이해하기 쉽다 == 버그를 쉽게 찾는다.
프로그래밍 속도를 높일 수 있다.
- 좋은 설계 코드의 누적은 기능추가시에 점점 속도를 높이게 만들어준다.
언제 리팩토링해야 할까?
- 한시간 간격으로 하는게 좋다. 그럼 법칙으로는?
3의 법칙
- 그냥하기
- 중복시에도 일단 그냥하기
- 중복이 다시한번 나오면 그때 리팩토링
준비를 위한 리팩터링 : 기능을 쉽게 추가하게 만들기
- 리팩터링의 최적시점은 새로운 기능을 추가하기 직전.
- 복사 붙여넣기 식으로 하기보다는 함수 매개변수화 해서 호출하는게 좋다.
- 버그가 나더라도 여러곳에서 나는것보다 한곳에서 나는것이 수정하기 편하기때문.
이해를 위한 리팩터링 : 코드 이해하기 쉽게 만들기.
- 변수를 쉽게 바꿔주고 긴함수를 나눠주는 과정을 거치면 설계가 보이기 시작한다.