✏️6.2 함수 인라인하기 (Inline Function)

↔️ 함수 추출하기

funtion getRating(driver) {
  return moreThanFiveLateDeliveries(driver) ? 2 : 1;
}

function moreThanFiveLateDeliveries(driver) {
  return driver.numberOfLateDeliveries > 5;
}

리팩터링 후

function getRating(driver) {
  return (driver.numberOfLateDeliveries > 5) ? 2 : 1;
}

🧷 배경

간접 호출은 유용할 수도 있지만 쓸데 없는 간접 호출은 거슬릴 뿐이다. 리팩터링 과정에서 잘못 추출된 함수들도 다시 인라인한다. 잘못 추출된 함수들을 원래 함수로 합친 다음, 필요하면 원하는 형태로 다시 추출하는 것이다.

🧷 절차

  1. 다형 메서드인지 확인한다. (서브클래스에서 오버라이드하는 메서드는 인라인하면 안 된다.)

    다형성? 부모 클래스와 그 자식 클래스들 간에 동일한 메서드 이름을 가지고 있지만 각각의 클래스에서 다른 구현을 가지도록 하는 것을 의미

  2. 인라인할 함수를 호출하는 곳을 모두 찾는다.

  3. 각 호출문을 함수 본문으로 교체한다.

  4. 하나씩 교체할 때마다 테스트한다.

  5. 함수 정의(원래 함수)를 삭제한다.

🧷 리팩터링 전

function reportLines (aCustomer) {
  const lines = [];
  gatherCustomerData(lines, aCustomer);
  return lines;
}

function gatherCustomerData(out, aCustomer){
  out.push(["name", aCustomer.name]);
  out.push(["location", aCustomer.location]);
}

🧷 리팩터링 후

function reportLines (aCustomer) {
  const lines = [];
  lines.push(["name", aCustomer.name]);
  lines.push(["location", aCustomer.location]);
  return lines;
}

단계를 잘게 나눠서 처리하자.

Last updated