Learning
토픽 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, 코드스멜, 기술부채, 클린코드