마틴 파울러의 리팩토링 개인적 정리(제6·7장)

3445 단어 리팩토링

신장판 리팩토링 ~ 기존 코드를 안전하게 개선 ~


  • 읽었습니다.
  • 잊지 말고, 각각의 수법에 대해 한마디 정도로 메모해 갑니다.



  • 신규 버전 리팩토링 - 기존 코드를 안전하게 개선 - (OBJECT TECHNOLOGY SERIES) Martin Fowler 고다마 공신 옴사 2014-07-26 매출 랭킹 : 22428 Amazon에서 자세히 보기 by G-Tools

    제6장 방법의 구성



    방법 추출


  • 하나의 목적을 달성하기 위해 하나의 코드를 묶는다
  • 빈 줄로 구분하여 빈 줄로 묶을 정도라면 의미있는 이름을 가진 메소드로 추출합니다.

    메소드 인라인화 / 임시 변수 인라인화


  • 임시 변수에 넣을 것도없고, 메소드로서 묶을 것도없는 간단한 처리는 되돌린다

  • 쿼리로 임시 변수 대체


  • × 임시 변수에 유지하고 호출
  • ◯ 방법으로 매회 계산
  • 임시 변수의 범위를 좁히는 데 유효합니다
  • 메서드라면 객체의 어느 곳에서나 동일한 값을 사용할 수 있습니다.
  • 리팩터는 성능을 신경 쓰지 않습니다 (알기 쉽게 만든 다음 병목 현상을 최적화).

    설명용 변수 도입


  • 겉보기에 계산 결과를 모르는 식에 이름을 붙인다
  • 특히 조건 판정 부분에서 유효
  • isContained 라든지 isValid 라든지

  • 파라미터에 대입 제거


  • 입력 인수에의 대입, 치환은 하지 않는다
  • void someMethod(Object foo) {
      foo.someMethod(); // OK
      foo = bar;        // NG
    }
    

    메서드 객체로 메서드 바꾸기


  • 어느 메소드만을 가지는 클래스를 작성해, 실행을 위양한다
  • 임시 변수를 필드로 승격
  • 리팩터 중간에 풀어 놓는 단계에서 사용

  • 알고리즘 대체


  • 같은 것을 달성 할 수 있다면 가능한 한 간단하고 이해하기 쉬운 알고리즘을 사용하십시오.

    제7장 오브젝트간의 특성 이동



    메소드 이동


  • 자신의 필드가 아닌 다른 객체의 필드를 자주 참조하는 메서드는 해당 객체로 이동합니다.

    필드 이동


  • 내 메소드가 아닌 다른 오브젝트의 메소드에서 자주 참조되는 필드는 해당 오브젝트로 이동합니다.

    클래스 추출 / 클래스 인라인화


  • 단일 책임 나오지 않는 경우는 클래스를 분할
  • 같은 책임을 분담하고 있는 클래스나, 큰 일을 하지 않는 클래스는 통합

  • 위양 은폐 / 중개인 제거


  • 어느 클래스가 보관 유지하는 클래스의 메소드를 직접 호출하고있는 경우는, 적절하게 위양 메소드를 작성해, 종속성을 정리한다
  • 위양처의 메소드가 많은 경우 등은, 위양을 위해서만 중개 클래스에 대량 메소드를 쓰지 않으면 안 되므로 직접 부르도록 한다

  • 외부 메소드 도입


  • 외부 라이브러리 등, 변경할 수없는 클래스를 확장하는 경우
  • 그 클래스를 최초의 인수로 한 메소드를 작성한다
  • public void someMethod(Object someObj, int param, int param2) {
      // 何か処理
    }
    

    국부적 확장 도입


  • 외부 메소드가 많아진 경우
  • 래퍼 클래스 or 서브 클래스 로 대응한다
  • 좋은 웹페이지 즐겨찾기