실용주의 프로그래머 - 33. 리팩터링

https://book.naver.com/bookdb/book_detail.nhn?bid=7467119

리팩터링

  • (책) 소프트웨어는 건축보다 정원일(gardening)에 가깝다.
    • (나) 유지보수가 필요하다.
  • (책) 코드 재작성, 재작업, 재설계 등을 총괄해서 리팩터링이라 한다.

리팩터링은 언제 해야하는가?

  • (책) 어떤 이유로든 ‘잘못’되었다고 생각될 때. 변경하는 일을 주저하면 안 된다. 지금이 최적기다.
    • (나) 하지만 실제로 언제나 리팩터링을 하기란 쉽지 않다.
  • (책) 중복, 직교성이 좋지 않은 설계, 유효기간이 끝난 지식, 성능 등이 리팩터링의 원인이 되곤 한다.

현실 세계의 복잡한 문제들

  • (책) 리팩터링을 하지 않는 핑계로 자주 사용되는 이유가 일정의 압박이다. 하지만 설득력 있는 이유가 되지 못한다. 추후에 더 많은 시간을 투자하게 될테니

    • (나) 그렇다고 해도 데드라인을 엄수해야할 때 리팩터링 및 테스팅 코드가 부족한 상태로 종종 릴리즈 되곤한다.
  • (책) 리팩터링해야 할 것들의 명단을 만들고 유지하라. 당장 리팩터링 하기 힘들다면, 일정에 그것을 리팩터링할 시간을 확실히 포함시켜 두도록 한다.

    • (나) 관리자(매니저, 프로듀서)와 상의해야할 부분. 리팩터링은 종종 주요 업무로 인정되지 않기에 따로 시간을 떼어 두지 않으면 우선순위가 끝없이 뒤로 밀린다.
  • (책) 그 코드를 사용하는 사람들이 조만간 리팩터링될 것이라는 사실과 그 사실이 그들의 코드에 어떤 영향을 주게 될지 인지하도록 만들어야 한다.

    • (나) 인터페이스의 변화를 일으키는 리팩터링. 자주 하고 싶지는 않다. 디플로이 절차가 복잡하기도 하고, 문제가 일어날 가능성 역시 크다. 가능하면 한 번 정해진 인터페이스는 그대로 유지하는 것을 선호함. 처음부터 바른 설계가 중요.

마틴 파울러의 리팩토링에 대한 몇가지 조언

  1. 리팩터링과 새로운 기능 추가를 동시에 하지 말라.
  2. 리팩터링을 시작하기 전 든든한 테스트 집합이 있는지 먼저 확인한다.
  3. 단계를 작게 나누어서 신중하게 작업한다. 한 단계가 끝날 때마다 테스트를 돌린다면, 기나긴 시간의 디버깅 작업을 피할 수 있다.