<aside> 💡 11장에서 다루는 내용
</aside>
테스트에서 벗어난 코드가 어디에도 사용되지 않는다면 리팩터링 후 남은 죽은 코드 → 삭제 필요
추상화가 누락돼 있다. 비공개 메서드가 너무 복잡하면 별도의 클래스로 도출해야 하는 추상화가 누락됐다는 징후
// 예제 11.1
public class Order {
private Customer _customer;
private List<Product> _products;
public String generateDescription() {
return "Customer name : " + _customer.name +
"total number of products : " + _products.size() +
"total price : " + getPrice();
}
private BigDecimal getPrice() {
BigDecimal basePrice = /* _products 기반한 계산 */
BigDecimal discounts = /* _customer 기반한 계산 */
BigDecimal taxes = /* _products 기반한 계산 */
return basePrice.subtract(discounts).add(taxes);
}
}
// 예제 11.2
public class Order {
private Customer _customer;
private List<Product> _products;
public String generateDescription() {
PriceCalculator calc = new PriceCalculator();
return "Customer name : " + _customer.name +
"total number of products : " + _products.size() +
"total price : " + calc.calculator(_customer, _products);
}
}
public class PriceCalculator {
public BigDecimal calculator(Customer customer, List<Product> products) {
BigDecimal basePrice = /* _products 기반한 계산 */
BigDecimal discounts = /* _customer 기반한 계산 */
BigDecimal taxes = /* _products 기반한 계산 */
return basePrice.subtract(discounts).add(taxes);
}
}
표 11.1 코드의 공개 여부와 목적의 관계, 구현 세부 사항을 공개하지 말라.