본문 바로가기

클린코드

[Refactoring] 24. 주석

 

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

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

www.inflearn.com

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


주석
  • 코드 리팩토링 시, 불필요한 주석을 줄일 수 있다.
  • 관련 리팩토링
    • 함수 추출하기 -> 설명이 필요한 부분을 별도의 메서드로 뺴낸다.
    • 함수 선언부 변경하기 -> 함수 이름을 재정의할 수 있다.
    • 어서션 추가하기 -> 시스템적으로 어떤 필요한 규칙이 있는 경우

Refactoring 1. 어서션 추가하기

  • Assertion을 사용하면 코드로 표현하지 않은 조건들을 명시적으로 나타낼 수 있다.
  • Assertion은 if나 switch문과 달리 항상 true이길 기대하는 조건을 표현할 때 사용한다.
  • 특정 부분에선 특정한 상태를 가정하고 있다는 것을 명시적으로 나타낼 수 있다.
Before
public class Customer {

    private Double discountRate;

    public double applyDiscount(double amount) {
        return (this.discountRate != null) ? amount - (this.discountRate * amount) : amount;
    }

    public Double getDiscountRate() {
        return discountRate;
    }

    public void setDiscountRate(Double discountRate) {
        this.discountRate = discountRate;
    }
}
After
public class Customer {

    private Double discountRate;

    public double applyDiscount(double amount) {
        return (this.discountRate != null) ? amount - (this.discountRate * amount) : amount;
    }

    public Double getDiscountRate() {
        return discountRate;
    }

    public void setDiscountRate(Double discountRate) {
        assert discountRate != null && discountRate > 0;
        this.discountRate = discountRate;
    }
}

=> discountRate이 반드시 null이 아니거나, 양수일 경우 assert로 검증이 가능하다. : AssertionError 발생

** assert를 사용하기 위해서 자바 옵션 -ea를 설정해야 한다.

 

다음과 같이 코드를 작성해도 동일한 효과를 나타낼 수 있다.

public class Customer {

    private Double discountRate;

    public double applyDiscount(double amount) {
        return (this.discountRate != null) ? amount - (this.discountRate * amount) : amount;
    }

    public Double getDiscountRate() {
        return discountRate;
    }

    public void setDiscountRate(Double discountRate) {
        if (discountRate == null || discountRate < 0) {
            throw new IllegalArgumentException(discountRate + " can't be null or minus");
        }
        this.discountRate = discountRate;
    }
}