본문 바로가기
독서에서 한걸음

Insider Trading

by oncerun 2022. 12. 26.
반응형

내부자 거래라는 뜻으로 어떤 모듈이 다른 모듈의 내부 정보를 지나치게 많이 알고 있는 코드냄새이며, 그로 인해 지나치게 강한 결합도가 생길 수 있다.

 

보통 적절한 모듈로 함수를 옮기거나, 필드를 옮겨 결합도를 낮출 수 있다. 

 

어떤 모듈이 자주 사용하는 공통적인 기능은 새로운 모듈을 만들어 잘 관리하거나, 위임을 숨기는 함수를 만들어 특정 모듈의 중재자처럼 사용할 수도 있다.

 

상속으로 인한 결합도를 줄일 때는 슈퍼클래스 또는 서브클래스를 위임으로 교체하여 사용할 수 있다.

 

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

댓글