[Refactoring] 메소드 구성

📌 메소드 구성 (Composing Methods)

메소드를 간소화하고 코드 중복을 제거하며 향후 개선을 위한 기반을 마련


✏️ 메소드 추출 (Extract Method)

그룹으로 묶을 수 있는 코드가 있다면 적절한 메소드를 만들어서 해당 코드를 메소드 안으로 이동

✔️ 장점

  • 더 읽기 쉬운 코드
  • 재사용이 가능해서 코드 중복 감소
  • 코드의 독립적인 부분을 분리하여 오류 가능성 감소

✏️ 메소드 인라인 (Inline Method)

메소드 호출 부분이 메소드 자체보다 더 자세할 때 메소드 호출을 메소드 내용으로 바꾸고 메소드 삭제

✔️ 장점

  • 불필요한 메소드의 수를 최소화하여 코드를 더 간단하게 만듬

✏️ 변수 추출 (Extract Variable)

식의 결과나 부분을 자체 설명이 가능한 별도의 변수 작성

<변경 전>

void renderBanner() {
  if ((platform.toUpperCase().indexOf("MAC") > -1) &&
       (browser.toUpperCase().indexOf("IE") > -1) &&
        wasInitialized() && resize > 0 )
  {
    // do something
  }
}

<변경 후>

void renderBanner() {
  final boolean isMacOs = platform.toUpperCase().indexOf("MAC") > -1;
  final boolean isIE = browser.toUpperCase().indexOf("IE") > -1;
  final boolean wasResized = resize > 0;

  if (isMacOs && isIE && wasInitialized() && wasResized) {
    // do something
  }
}

✔️ 장점

  • 코드의 가독성이 좋아지고 주석이 줄어들어 더 읽기 쉬워짐

❌ 단점

  • 불필요한 연산이 실행되어 프로그램 성능이 저하될 수 있음
    ex) if(a() || b())라는 조건문이 있을 때 a() true라면 b()는 연산하지 않아도 true이므로 실행이 됨.
    하지만 변수로 이미 선언한 경우 a() b()의 연산이 항상 호출되므로 불필요한 연산이 발생함.

✏️ 임시 변수 인라인 (Inline Temp)

변수에 대한 참조를 표현식 자체로 변경

✔️ 장점

  • 불필요한 변수를 제거하여 가독성 약간 향상시킴

❌ 단점

  • 임시 값이 여러번 재사용된다면 캐시를 많이 사용함
    → 단순성으로 인해 성능이 저하되는지 확인 필요

✏️ 임시 변수를 쿼리로 변경 (Replace Temp with Query)

임시 변수에 표현식의 결과를 저장하고 있다면 새로운 메소드에 표현식을 넣고 임시 변수대신 메소드 호출

✔️ 장점

  • 메소드의 목적을 이해하기 쉽기 때문에 코드 가독성이 좋아짐
  • 메소드 재사용이 되므로 중복 코드를 제거할 수 있음

✏️ 분할 임시 변수 (Split Temporary Variable)

임시 변수에 표현식의 결과를 저장하고 있다면 새로운 메소드에 표현식을 넣고 임시 변수대신 메소드 호출

✔️ 장점

  • 쉽게 교체 가능하므로 유지 관리가 편해짐
  • 변수명으로 쉽게 의도를 파악하므로 코드가 읽기 쉬워짐

✏️ 매개변수에 대한 할당 제거 (Remove Assignments to Parameters)

매개변수 대신 지역 변수 사용

✔️ 장점

  • 쉽게 교체 가능하므로 유지 관리가 편해짐
  • 메소드 추출 방법을 사용할 때 도움이 됨

✏️ 매소드를 매소드 객체로 변경 (Replace Method with Method Object)

지역 변수가 얽혀 있어서 메소드 추출을 못한다면 메소드를 별도의 클래스로 변환

✔️ 장점

  • 메소드의 크기가 커지는 것을 막을 수 있음
  • 원래의 클래스를 오염시키지 않고 클래스 내의 하위 메소드로 분활 가능

❌ 단점

  • 클래스가 추가되어서 프로그램의 전체 복잡성 증가

✏️ 알고리즘 교체 (Substitute Algorithm)

알고리즘을 구현하는 메서드의 본문을 새로운 알고리즘으로 변경


📑 참고 자료

좋은 웹페이지 즐겨찾기