반응형
내부자 거래라는 뜻으로 어떤 모듈이 다른 모듈의 내부 정보를 지나치게 많이 알고 있는 코드냄새이며, 그로 인해 지나치게 강한 결합도가 생길 수 있다.
보통 적절한 모듈로 함수를 옮기거나, 필드를 옮겨 결합도를 낮출 수 있다.
어떤 모듈이 자주 사용하는 공통적인 기능은 새로운 모듈을 만들어 잘 관리하거나, 위임을 숨기는 함수를 만들어 특정 모듈의 중재자처럼 사용할 수도 있다.
상속으로 인한 결합도를 줄일 때는 슈퍼클래스 또는 서브클래스를 위임으로 교체하여 사용할 수 있다.
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 class CheckIn {
public boolean isFastPass(Ticket ticket) {
LocalDate earlyBirdDate = LocalDate.of(2022, 1, 1);
return ticket.isPrime() && ticket.getPurchasedDate().isBefore(earlyBirdDate);
}
}
CheckIn의 isFastPass() 메소드 내부에서는 상당히 많은 ticket의 내부 정보를 참조하고 있다.
어쩌면 이 메소드의 역할이 CheckIn이 아니라 ticket에 위치하는 것이 적절하지 않은지.
이러한 코드들이 보인다면 IInsider Trading의 리팩토링 적용대상이 아닌지 고민할 필요가 있다.
public boolean isFastPass() {
LocalDate earlyBirdDate = LocalDate.of(2022, 1, 1);
return isPrime() && getPurchasedDate().isBefore(earlyBirdDate);
}
이로인해 CheckIn에서 참조하는 Ticket에 대한 결합도가 낮아진 것을 확인할 수 있다.
반응형
'독서에서 한걸음' 카테고리의 다른 글
Alternative Classes with Different Interfaces (0) | 2022.12.27 |
---|---|
Large Class (0) | 2022.12.26 |
Middle Man (0) | 2022.12.24 |
Message Chains (0) | 2022.12.24 |
Temporary Field (0) | 2022.12.24 |
댓글