- 리팩터링이란 작업 전과 후가 같은 동작을 수행하도록하는 Restructuring의 특수한 하나의 형태이다.
리팩터링을 하는 이유
- (소프트웨어 설계) 규칙적인 리팩터링은 코드 구조를 지탱해준다. 중복 코드가 제거되고, 코드는 항상 고유한 일을 수행함을 보장할 수 있다.
- (가독성) 소프트웨어를 이해하기 쉬워진다. 내 코드의 의도를 더 명확히 드러내도록 개선할 수 있다.
- 버그를 쉽게 찾을 수 있다, 생산성 개선 등
리팩터링 진행
- 준비를 위한 리팩터링: 코드베이스 변경 직전에 최선의 구조로 변경하는 리팩터링
- 이해를 위한 리팩터링: 레거시를 분석할 때 or 복잡한 로직을 이해할 때 깊은 수준까지 로직을 이해하는데 도움이 된다.
- 계획된 리팩터링과 수시로 하는 리팩터링
리팩터링 작업 분리
: 계획된 리팩터링과 수시로 하는 리팩터링을 수행하면서 팀에 맞는 방식을 도출해내기
- 작업 방식 차이: 계획된 리팩터링(커밋분리)를 통해 각 task 별 차이점을 인지하고 현재 어떤 작업에 초점을 두어야 할 지 확실히 할 수 있는 반면에 시간낭비일 수 있다. 수시로 하는 리팩터링은 생각날때마다 조금씩 변경을 줄 수 있다.
- (계획된 리팩터링) 형상 관리: 작은 단위의 리팩터링 작업을 통해 다른 사람이 히스토리를 명확히 알 수 있다.
Extreme Programing(XP)
: CI(Continuous Integration) + 리팩토링(Test)
- XP: 통합(merge) 기간이 길어질수록 단위가 커지고, 많은 곳에서 리팩토링된 코드를 통합하는데 더 큰 어려움이 따른다. 이러한 측면에서 지속적 통합은 리팩토링과 연계되면 좋다.
- test: 리팩터링 대상의 동작이 일관되어야하고, 신뢰성을 위해서 test case가 필요.
- 테스트가 없는 경우, 안전하다고 검증된 몇 가지 리팩터링 기법만 사용하는 경우도 있다. (e.g. 자동 리팩토링)
Reference)
리팩터링 2판