리펙터링 원칙

 · 1 min read

Refactoring

Chapter 2. 리펙터링 원칙

리팩터링 정의

[명사] '소프트웨어의 겉보기 동작은 그대로 유지한 채, 코드를 이해하고 수정하기 쉽도록 내부 구조를 변경하는 기법'

[동사] '소프트웨어의 겉보기 동작은 그대로 유지한 채, 여러 가지 리팩터링 기법을 적용해서 소프트웨어를 재구성하다.'
  • 리팩터링하면
    • 소프트웨어 설계가 좋아진다
    • 소프트웨어를 이해하기 쉬워진다 (버그를 찾기 쉬워진다)
    • 버그를 쉽게 찾을 수 있다
    • 프로그래밍 속도를 높일 수 있다
'보기 싫은 코드를 발견하면 리팩터링하자. 그런데 잘 작성된 코드 역시 수많은 리팩터링을 거쳐야 한다.''

언제 리팩터링해야 할까?

  • 준비를 위한 리팩터링 : 기능을 쉽게 추가하게 만들기
  • 이해를 위한 리팩터링 : 코드를 이해하기 쉽게 만들기
  • 쓰레기 줍기 리팩터링
  • 계획된 리팩터링과 수시로 하는 리팩터링
  • 오래 걸리는 리팩터링
  • 코드 리뷰에 리팩터링 활용하기

리팩터링 시 고려할 문제

  • 새 기능 개발 속도 저하
    • 리팩터링은 개발 기간을 단축하고자 하는 것이다.
    • 기능 추가 시간을 줄이고, 버그 수정 시간을 줄여준다.
  • 코드 소유권
    • 코드 소유권을 팀에 두는 것을 선호한다.
  • 브랜치
    • 팀원마다 코드베이스의 branch를 하나씩 맡아서 작업하다 결과물이 쌓이면 master branch에 통합해서 공유하자. (지속적 통합 적용, CI)
  • 테스팅
    • 자가 테스트 코드를 갖추자.
  • 레거시 코드
    • 테스트를 보강하자.
  • 데이터베이스

리팩터링과 성능

리팩터링은 성능 좋은 소프트웨어를 만드는 데 기여한다.

빠른 소프트웨어를 작성하는 방법

  • 시간 예산 분배 방식
    • 설계를 여러 컴포넌트로 나눠서 컴포넌트마다 자원 예산을 할당
  • 끊임없이 관심을 기울이자
  • 의도적으로 성능 최적화에 돌입하기 전까지 성능에 신경 쓰지 않고 코드를 다루기 쉽게 만드는 데 집중하자.

리펙터링과 최적화의 관계

  • 리팩터링을 잘 해두면 서능 튜닝에 투입할 시간을 벌 수 있다.
  • 리팩터링이 잘 되어 있는 프로그램은 성능을 더 세밀하게 분석할 수 있다.

참고 도서

리팩터링 워크북

패턴을 활용한 리팩터링