[리팩터링 카탈로그] 1-1. 함수 추출하기

  1. 함수를 새로 만들고 목적을 잘 드러내는 이름을 붙인다(‘어떻게’가 아닌 ‘무엇을’ 하는지 드러나야한다).
  2. 추출할 코드를 원본함수에서 복사하여 새 함수에 붙여넣는다.
  3. 추출한 코드 중 원본 함수의 지역 변수를 참조하거나 추출한 함수의 유효범위를 벗어나는 변수는 없는지 검사한다. 있다면 매개변수로 전달한다.
  4. 변수를 다 처리했다면 컴파일한다.
  5. 원본 함수에서 추출한 코드 부분을 새로 만든 함수를 호출하는 문장으로 바꾼다(즉, 추출한 함수로 일을 위임한다).
  6. 테스트한다.
  7. 다른 코드에 방금 추출한 것과 똑같거나 비슷한 코드가 없는지 살핀다. 있다면 방금 추출한 새 함수를 호출하도록 바꿀지 검토한다(인라인코드를 함수호출로 바꾸기).

예시

Before:

function printOwing(invoice) {
  console.log("*********************");
  console.log("***** 고객 채무 *****");
  console.log("*********************");
  // 세부 사항을 출력한다.
  console.log(`고객명: ${invoice.customer}`);
  console.log(`채무액: ${outstanding}`);
  console.log(`마감일: ${invoice.dueDate.toLocaleDateString()}`);
}

After:

function printOwing(invoice) {
  printBanner();
  // 세부 사항을 출력한다.
  printDetails(invoice, outstanding);
}
function printBanner() {
  console.log("*********************");
  console.log("***** 고객 채무 *****");
  console.log("*********************");
}
function printDetails(invoice, outstanding) {
  console.log(`고객명: ${invoice.customer}`);
  console.log(`채무액: ${outstanding}`);
  console.log(`마감일: ${invoice.dueDate.toLocaleDateString()}`);
}

출처 : 리팩터링 2판 – Chapter6

댓글 남기기