ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Refactoring] 9. 기능 편애
    클린코드 2022. 9. 12. 15:14

     

     

    코딩으로 학습하는 리팩토링 - 인프런 | 강의

    리팩토링은 소프트웨어 엔지니어가 갖춰야 할 기본적인 소양 중 하나입니다. 이 강의는 인텔리J와 자바를 사용하여 보다 실용적인 방법으로 다양한 코드의 냄새와 리팩토링 기술을 설명하고 직

    www.inflearn.com

    | 인프런 - 백기선님의 코딩으로 학습하는 리팩토링 강의를 수강하며 정리한 글입니다.


    기능 편애
    • 어떤 모듈에 있는 함수가 다른 모듈에 있는 데이터나 함수들을 더 많이 참조할 때 발생한다.
    • 만약 여러 모듈을 참조하고 있다면, 그 중에서 가장 많은 데이터를 참조하는 곳으로 옮기거나, 함수를 여러 개로 쪼개서 각 모듈로 분산시킬 수 있다.
    • 데이터와 해당 데이터를 참조하는 행동을 같은 곳에 두는 것이 좋다.
    • 예외적으로, 데이터와 행동을 분리한 디자인 패턴을 적용할 수 있다.
    • 관련 리팩토링
      • 함수 옮기기 -> 함수를 적절한 위치로 이동시킨다.
      • 함수 추출하기 -> 함수 일부부만 다른 곳에서 많이 참조할 시 함수를 추출하여 다른 모듈로 이동시킨다.
    Before
    public class Bill {
    
        private ElectricityUsage electricityUsage;
    
        private GasUsage gasUsage;
    
        public double calculateBill() {
            var electicityBill = electricityUsage.getAmount() * electricityUsage.getPricePerUnit();
            var gasBill = gasUsage.getAmount() * gasUsage.getPricePerUnit();
            return electicityBill + gasBill;
        }
    
    }
    
    public class ElectricityUsage {
    
        private double amount;
    
        private double pricePerUnit;
    
        public ElectricityUsage(double amount, double pricePerUnit) {
            this.amount = amount;
            this.pricePerUnit = pricePerUnit;
        }
    
        public double getAmount() {
            return amount;
        }
    
        public double getPricePerUnit() {
            return pricePerUnit;
        }
    }
    
    public class GasUsage {
    
        private double amount;
    
        private double pricePerUnit;
    
        public GasUsage(double amount, double pricePerUnit) {
            this.amount = amount;
            this.pricePerUnit = pricePerUnit;
        }
    
        public double getAmount() {
            return amount;
        }
    
        public double getPricePerUnit() {
            return pricePerUnit;
        }
    }

    => Bill Class에서 불필요한 전기, 가스 사용량 계산

    After
    public class Bill {
    
        private ElectricityUsage electricityUsage;
    
        private GasUsage gasUsage;
    
        public double calculateBill() {
            return electricityUsage.getElecticityBill() + gasUsage.getGasBill();
        }
    
    }
    
    public class ElectricityUsage {
    
        private double amount;
    
        private double pricePerUnit;
    
        public ElectricityUsage(double amount, double pricePerUnit) {
            this.amount = amount;
            this.pricePerUnit = pricePerUnit;
        }
    
        public double getAmount() {
            return amount;
        }
    
        public double getPricePerUnit() {
            return pricePerUnit;
        }
    
        public double getElectricityBill() {
            return amount * pricePerUnit;
        }
    }
    
    public class GasUsage {
    
        private double amount;
    
        private double pricePerUnit;
    
        public GasUsage(double amount, double pricePerUnit) {
            this.amount = amount;
            this.pricePerUnit = pricePerUnit;
        }
    
        public double getAmount() {
            return amount;
        }
    
        public double getPricePerUnit() {
            return pricePerUnit;
        }
    
        public double getGasBill() {
            return amount * pricePerUnit;
        }
    }

    '클린코드' 카테고리의 다른 글

    [Refactoring] 11. 기본형 집착  (0) 2022.09.14
    [Refactoring] 10. 데이터 뭉치  (0) 2022.09.13
    [Refactoring] 8. 산탄총 수술  (0) 2022.09.11
    [Refactoring] 7. 뒤엉킨 변경  (0) 2022.09.10
    [Refactoring] 6. 가변 데이터  (0) 2022.09.09

    댓글

Designed by Tistory.