| 인프런 - 백기선님의 코딩으로 학습하는 리팩토링 강의를 수강하며 정리한 글입니다.
주석
- 코드 리팩토링 시, 불필요한 주석을 줄일 수 있다.
- 관련 리팩토링
- 함수 추출하기 -> 설명이 필요한 부분을 별도의 메서드로 뺴낸다.
- 함수 선언부 변경하기 -> 함수 이름을 재정의할 수 있다.
- 어서션 추가하기 -> 시스템적으로 어떤 필요한 규칙이 있는 경우
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;
}
}
'클린코드' 카테고리의 다른 글
[Refactoring] 정리 (2) (0) | 2022.09.30 |
---|---|
[Refactoring] 정리 (1) (0) | 2022.09.29 |
[Refactoring] 23. 상속 포기하기 (0) | 2022.09.27 |
[Refactoring] 22. 데이터 클래스 (1) | 2022.09.26 |
[Refactoring] 21. 서로 다른 인터페이스의 대안 클래스들 (1) | 2022.09.25 |