| 인프런 - 백기선님의 코딩으로 학습하는 리팩토링 강의를 수강하며 정리한 글입니다.
내부자 거래
- 어떤 모듈이 다른 모듈의 내부 정보를 지나치게 많이 알고 있는 코드 냄새로 지나치게 강한 결합도가 생길 수 있다.
- 관련 리팩토링
- 함수 옮기기, 필드 옮기기 -> 함수, 필드를 옮겨 결합도를 낮출 수 있다.
- 위임 숨기기 -> 특정 모듈의 중재자처럼 사용
- 슈퍼 클래스, 서브 클래스를 위임으로 교체하기 -> 상속으로 인한 결합도 줄이기
Before
public class CheckIn {
public boolean isFastPass(Ticket ticket) {
LocalDate earlyBirdDate = LocalDate.of(2022, 1, 1);
return ticket.isPrime() && ticket.getPurchasedDate().isBefore(earlyBirdDate);
}
}
public class Ticket {
private LocalDate purchasedDate;
private boolean prime;
public Ticket(LocalDate purchasedDate, boolean prime) {
this.purchasedDate = purchasedDate;
this.prime = prime;
}
public LocalDate getPurchasedDate() {
return purchasedDate;
}
public boolean isPrime() {
return prime;
}
}
=> CheckIn에서 Ticket을 지나치게 많이 참조하고 있다. : 해당 메서드의 필요성 검토 필요
After
public class Ticket {
private LocalDate purchasedDate;
private boolean prime;
public Ticket(LocalDate purchasedDate, boolean prime) {
this.purchasedDate = purchasedDate;
this.prime = prime;
}
public LocalDate getPurchasedDate() {
return purchasedDate;
}
public boolean isPrime() {
return prime;
}
public boolean isFastPass(Ticket ticket) {
LocalDate earlyBirdDate = LocalDate.of(2022, 1, 1);
return isPrime() && purchasedDate.isBefore(earlyBirdDate);
}
}
=> isFastPass 메서드를 Ticket으로 옮긴다.
'클린코드' 카테고리의 다른 글
[Refactoring] 21. 서로 다른 인터페이스의 대안 클래스들 (1) | 2022.09.25 |
---|---|
[Refactoring] 20. 거대한 클래스 (0) | 2022.09.24 |
[Refactoring] 18. 중재자 (0) | 2022.09.22 |
[Refactoring] 17. 메시지 체인 (0) | 2022.09.21 |
[Refactoring] 16. 임시 필드 (1) | 2022.09.20 |