[nodejs] TDD의 리팩토링 기법

Test-Driven Development (TDD)는 개발자가 작성할 코드에 대한 테스트를 먼저 작성하고, 해당 테스트가 실패하는 방식으로 개발을 진행하는 기법입니다. TDD를 사용하면 코드의 품질이 향상되고 유지보수가 쉬워집니다. 그러나 TDD로 작성된 코드도 변화할 수 있습니다. 이러한 상황에서 테스트 코드와 실제 코드의 품질을 유지하기 위해 리팩토링이 필요합니다.

리팩토링이란?

리팩토링은 코드의 구조를 변경하지 않으면서 가독성을 높이고 유지보수를 쉽게 하는 작업입니다. 리팩토링은 개발자들 사이에서 공통된 기법을 사용합니다.

여러 가지 리팩토링 기법

Extract Method

Extract Method는 여러 곳에서 중복되는 코드를 하나의 메서드로 추출하는 기법입니다. 이를 통해 코드의 중복을 제거하고 가독성을 높일 수 있습니다.

// Before
function calculateTotalPrice(products) {
  let total = 0;
  for (let i = 0; i < products.length; i++) {
    total += products[i].price;
  }
  // ... 다른 코드
}
// After
function calculateTotalPrice(products) {
  let total = 0;
  for (let i = 0; i < products.length; i++) {
    total += getProductPrice(products[i]);
  }
  // ... 다른 코드
}

function getProductPrice(product) {
  return product.price;
}

Rename Symbol

Rename Symbol은 변수, 함수, 클래스 등의 이름을 표현력이 좋은 이름으로 변경하는 기법입니다. 좀 더 명확한 이름을 사용하여 코드를 이해하기 쉽도록 합니다.

// Before
function c(p) {
  return p.price * 0.9;
}
// After
function applyDiscount(price) {
  return price * 0.9;
}

Inline Variable

Inline Variable은 불필요한 변수를 제거하고 해당 변수가 사용된 곳에 직접 값을 대입하는 기법입니다.

// Before
let total = calculateTotalPrice(products);
console.log(total);

function calculateTotalPrice(products) {
  let result = 0;
  for (let i = 0; i < products.length; i++) {
    result += products[i].price;
  }
  return result;
}
// After
console.log(calculateTotalPrice(products));

function calculateTotalPrice(products) {
  let total = 0;
  for (let i = 0; i < products.length; i++) {
    total += products[i].price;
  }
  return total;
}

결론

TDD를 사용하면 테스트를 통과하기 위한 코드를 작성하게 됩니다. 그래서 TDD로 작성된 코드는 높은 품질의 코드라고 볼 수 있습니다. 리팩토링을 통해 TDD로 작성된 코드를 더욱 완벽하게 만들 수 있습니다.