리팩토링에 대한 이해 (2) - 리팩토링이 필요한 시점

gentledot·2021년 3월 28일
0

리팩토링을 해야 하는 시점

  • 3의 법칙 (돈 로버츠 Don Roberts)

    // 삼진 리팩토링
    1. 처음에는 그냥 한다.
    2. 비슷한 일을 두 번째로 하게 되면(중복이 생겼다는 사실에 당황스럽겠지만), 일단 계속 진행한다.
    3. 비슷한 일을 세 번째 하게 되면 리팩토링 한다.

준비를 위한 리팩토링 (Preparatory Refactoring)

  • 기능을 쉽게 추가하도록 만들기
    • 동일한 기능을 한 곳에서 처리되도록 합쳐 한 곳에서 관리하도록 수정한다.
  • 이 때 사용하기 적절한 기법은 함수 매개변수화하기 를 적용하는 것이다.

이해를 위한 리팩토링

  • 코드를 이해하기 쉽게 만들기
  • 코드의 의도가 더 명확하게 드러나도록 구조를 정리한다.
    • 조건부 로직의 구조가 이상하지 않은지?
    • 함수 이름이 잘못 정해 로직 파악에 시간이 오래 걸리지는 않는지?
    • 코드 구조를 정리하면서 로직이 하는 역할과 영향 주는 부분에 대한 파악이 가능하게 된다.

쓰레기 줍기 리팩토링 (Litter-Pickup Refactoring)

  • 코드가 일을 비효율적으로 처리하는 모습을 발견할 때가 있다.
    • 로직이 쓸데없이 복잡하거나
    • 매개변수화한 함수 하나면 될 일을 거의 똑같은 함수 여러 개로 작성해뒀거나
  • 원래 하려던 일과 관련 없는 일에 너무 많은 시간을 빼앗기지 않도록
    • 간단히 수정할 수 있는 일은 즉시 고치고
    • 시간이 좀 걸리는 일은 짧은 메모만 남긴 다음 하던 일을 끝내고 나서 처리한다.
  • 작은 단계가 코드를 깨뜨리지 않는다!

계획된 리팩토링과 수시로 하는 리팩토링

  • 리팩토링은 프로그래밍과 구분되는 별개의 활동이 아니다!

    보기 싫은 코드를 발견하면 리팩토링하자. 그런데 잘 작성된 코드 역시 수많은 리팩토링을 거쳐야 한다. (p88)

  • 상황이 변해 기준을 변경해야 할 때 코드가 깔끔하다면 리팩토링하기가 더 쉽다.

    무언가 수정하려 할 때는 먼저 수정하기 쉽게 정돈하고(단, 만만치 않을 수 있다.) 그런 다음 쉽게 수정하자. - 켄트 벡 (p88)

  • 계획된 리팩토링은 최소한으로 줄여야 한다. 기능 개발 시 수시로 리팩토링을 작업해야 한다.

  • 대규모 리팩토링보다는 코드를 작업할 때 원하는 방향으로 조금씩 개선하는 것이 바람직하다.

코드 리뷰에 리팩토링 활용

  • 리팩토링을 통해 개선 사항을 눈으로 확인하며 아이디어를 정리하는데 도움이 될 수 있다.
    • 개선안의 제시에 그치지 않고 코드를 즉시 구현해보면서 결과를 바로 확인할 수 있기 때문이다.
  • 코드 작성자와 나란히 앉아 코드를 훑어가면서 리팩토링 = 짝 프로그래밍(pair programming) 이 가능하다.
    • (대부분의 경우에) 자가 테스트 코드 (self-testing code)를 마련해야 한다는 뜻
      bliki: SelfTestingCode
profile
그동안 마신 커피와 개발 지식, 경험을 기록하는 공간

0개의 댓글