Be-Developer

Refactoring 01 첫번째 예씨

01 첫번째 예시

  • 프로그램이 새로운 기능을 추가하기에 편한 구조가 아니라면, 먼저 기능을 추가하기 쉬운 형태로 리팩터링하고나서 원하는 기능을 추가한다.
  • 리팩터링하기 전에 제대로된 테스트부터 마련하라. 테스트는 반드시 자가진단하도록 만든다. (검증문이 있도록 하자)
  • 조금씩 변경하고, 변경 후에는 테스트하는 습관을 들이자.
    • 한번에 많이 수정하려다 실수하면 결과적으로 작업시간이 늘어난다.
    • 변경사항 후 커밋단위도 짧게 하자.

논리적인 요소 파악을 위한 코드 구조 수정

  1. 긴 함수를 리팩터링할때는, 전체동작을 부분으로 나누자.
    • ex) 분기지점?
    • 긴 함수를 잘게 쪼갤때는 이름을 잘지어야만 효과가 있는데, 당장은 최선의 이름으로 사용하다 나중에 더 나은방안이 있다면 주저없이 바꾸자.
  2. 명확하게 표현할 수 있는 방법을 검토한다.
    • 변수명, 메서드명,,
    • 동적타입 변수라면 타입이 접두어에 드러나도록하고, 타입이 명확하지않다면 (a/an)을 붙이자 (켄트백)
  3. 전역변수에서 추출가능한 지역변수는 매개변수(arg)에서 지우고, 질의 메서드 호출로 바꾸자.
  4. 지역변수를 정의하지않고 변수를 인라인시키자. (사용하는곳에서 호출)
    • 간단한 질의메서드라면 (내부에서 getter 호출?) 성능에는 큰 영향을 주지 않는다.
    • 성능이 느려지더라도, 리팩토링된 코드가 개선하기 더 쉽다.
    • 지역변수를 제거하면 메서드 추출작업이 쉬워진다. 😲
    • 지역변수는 자신이 속한 루틴에만 의미가 있어서 루틴이 길고 복잡해지기가 쉽다.
  5. 함수 변수를 일반 함수로 변경 (너무 간단한 리팩토링의 일종)

    이 리팩토링이 어떤 의미가 있을까 (p.43) 함수 변수도 지역변수이기때문?

  6. 반복문 쪼개기
    • for문 내 구분을 여러개의 반복문으로 쪼개자.
    • 문장 슬라이드하기 : 해당 반복문에서 사용되는 지역변수를 반복문 앞으로 이동.
    • 반복문이 중복되는것이 성능에 큰 영향을 주지 않는다. (항상은 아님. 성능 확인도 같이하자) - ** 특별한 경우가 아니라면 성능걱정은 미루고, 리팩터링 과정에서 성능이 크게 떨어졌다면 리팩터링 후 시간을 내어 성능을 개선하자.**

      단계 쪼개기

       - 단계를 쪼개려면 먼저 각 단계를 함수로 추출하자.
       - 1단계 return으로 2단계를 호출한다.
       - 2단계 메서드 매개변수로 필요한 데이터를 1단계에서 말아서 불변 매개변수 1개만 넘기자. (중간 데이터 구조)
       - 반복문을 파이프라인으로 바꾸기 ## 두 파일(단계)로 분리됨
       - 메서드분리로 코드수는 많아졌지만, 가독성은 좋아졌다.
       - 코드베이스를 작업 시작 전보다 건강하게 만들어놓고 떠나야한다. ## 다형성
       - 조건부 로직을 다형성으로 바꾸기.
       - 타입 클래스를 서브클래스로 바꾸기
       - 서브클래스를 사용하려면 생성자를 팩터리함수로 바꾸자. ## 정리
      
  7. 함수추출
  8. 단계쪼개기 (파일분리)
  9. 다형성
    • 리팩터링은 대부분 코드가 하는 일을 파악하는데에서 시작한다.
    • 좋은 코드는 얼마나 수정이 쉬운가이다.