[Refactoring] # 함수 추출하기

mechaniccoder·2021년 9월 25일
0
post-thumbnail

내가 생각할때 함수 추출하기라고 불리는 리팩토링 기법은 세부적인 구현에 관한 코드를 함수로 빼서 의미를 부여하는 과정이라고 생각한다. 즉, 다른 동료 개발자들은 세부적인 구현 코드를 알 필요없이 함수의 이름만으로 이 코드가 어떤 동작을 하는 코드인지를 알 수 있는 것이다. 뿐만 아니라, 함수로 추출함으로서 중복되는 코드를 줄일 수도 있다.

어떤 식으로 함수를 추출하는지 아래의 코드에서 확인해보자.

Code

before

function printOwing(invoice) {
  let outstanding = 0;

  console.log("**");
  console.log("**고객채무**");
  console.log("**");

  for (const o of invoice.orders) {
    outstanding += o.amount;
  }

  const today = Clock.today;
  invoice.dueDate = new Date(
    today.getFullYear(),
    today.getMonth(),
    today.getDate() + 30
  );

  console.log(`고객명: ${invoice.customer}`);
}

after

function printOwing(invoice) {
  printBanner();

  let outstanding = calculateOutstanding(invoice);

  recordDueDate(invoice);

  printDetail(invoice);

  function printBanner() {
    console.log("**");
    console.log("**고객채무**");
    console.log("**");
  }

  function calculateOutstanding(invoice) {
    let result = 0;
    for (const o of invoice.orders) {
      result += o.amount;
    }

    return result;
  }

  function printDetail(invoice) {
    console.log(`고객명: ${invoice.customer}`);
  }

  function recordDueDate(invoice) {
    const today = Clock.today;
    invoice.dueDate = new Date(
      today.getFullYear(),
      today.getMonth(),
      today.getDate() + 30
    );
  }
}

자바스크립트에서는 nested function이 허용되기 때문에 함수 본문에서 또 다른 함수를 추출해줬다.
after 코드를 확인해보면 4줄로 코드가 간단히 정리된 것을 알 수 있다. 기본적인 리팩토링 기법이지만 굉장히 유용한 것 같다. 구현이 복잡한 코드는 클라이언트에서 이를 추출해 캡슐화 해주자!

References

  • Refactoring: Improving the Design of Existing Code (2nd Edition) p158-168.
profile
세계 최고 수준을 향해 달려가는 개발자입니다.

0개의 댓글