토픽 75 / 192·소프트웨어 품질과 프로세스
리팩토링 (Refactoring)
리팩토링 (Refactoring)
외부 동작(기능)을 변경하지 않으면서 내부 코드 구조를 개선하여 가독성, 유지보수성, 확장성을 향상시키는 활동
제안자: Martin Fowler (1999년, "Refactoring" 저서)
목적: 코드 품질 향상, 기술 부채 상환, 이해도 증가
리팩토링 기법(예시)
- •메서드 추출(Extract Method): 코드 블록을 메서드로 분리
- •메서드 인라인(Inline Method): 불필요한 메서드 제거
- •변수 추출(Extract Variable): 복잡한 표현식을 변수로
- •클래스 추출(Extract Class): 책임 분리
- •이름 변경(Rename): 의미 있는 이름으로
- •조건문 분해(Decompose Conditional): 복잡한 조건 분리
- •반복문 분리(Split Loop): 여러 작업 분리
코드 스멜 (리팩토링 신호)
- •긴 메서드, 큰 클래스
- •중복 코드
- •긴 매개변수 목록
- •산탄총 수술 (변경 시 여러 클래스 수정)
- •기능 편애 (다른 클래스 데이터에 관심)
안전한 리팩토링: 테스트 커버리지 확보 후 진행
도구: IDE 리팩토링 기능, SonarQube
비교: 리팩토링(구조개선) vs 최적화(성능개선) vs 재작성(전면교체)
연관: TDD, 코드스멜, 기술부채, 클린코드