6.1 함수 추출하기

목적과 구현을 분리하여 합리적으로 코드를 분리하자

함수를 짧게 만들면 함수 호출이 많아질까?

→ 함수가 짧으면 캐싱하기 쉬워서 컴파일러가 최적화 할 때 유리할 떄가 많다.

⇒ 성능 최적화는 항상 일반 지침을 따르는 것이 좋다

  1. 하지 마라
  2. 아직 하지마라

절차

  1. 함수를 새로 만들고 목적을 잘 들어내는 이름을 붙인다.
    1. 매우 간단해도 목적이 더 잘 드러나는 이름으로 붙일 수 있으면 추출한다
    2. 이름이 떠오르지 않는다면 추출하면 안된다는 신호이다.
    3. 중첨 함수를 지원하는 언어는 중첩시킨다.
  2. 추출할 코드를 원본 함수에서 복사해서 새 함수에 붙인다.
  3. 추출한 코드에서 원본 함수의 지역 변수를 참조하거나 유효범위를 벗어나느 변수가 없는지 검사한다.
  4. 변수를 모두 처리하고 컴파일
  5. 추출 코드 중 새로 만든 함수를 호출하는 문자로 바꾼다
  6. 비슷한 코드가 존재하는지 확인

예시1 : 유효 범위가 벗어나는 변수가 없을 때

function printOwing(invoice) {
  let outstanding = 0;

  console.log("***********************");
  console.log("**** Customer Owes ****");
  console.log("***********************");
  //미해결 채무 계산
  for (const o of invoice.orders) {
    outstanding += o.amount;
  }

  //마감일을 기록
  const today = Clock.today(); 
  // Cock.today는 Clck Wrapper로서 시스템 시계를 감싼다.
  invoice.dueDate = new Date(
    today.getFullYear(),
    today.getMonth(),
    today.getDate() + 30,
  );
  console.log(`name: ${invoice.customer}`);
  console.log(`amount: ${outstanding}`);
  console.log(`due: ${invoice.dueDate.toLocaleDateString("en-US")}`);

}

예시2 : 지역 변수를 사용할 때