데메테르의 법칙은 실제로 법칙은 아니지만, 다른 호출로부터 받은 객체에서 메서드를 호출하지 않도록 스타일 가이드라인을 지정하고 있습니다. 이 가이드라인을 따르는 코드는 유지 관리, 조정, 리팩터링이 쉬우며 메서드 간의 결합 및 중복이 적고 정보 숨기기가 간편합니다. 이 가이드라인을 준수하려면 여러 래퍼 메서드를 작성해야 합니다.
예:
boolean pay(Customer c, Invoice invoice) {
int dollars = c.getWallet().contents; // 위반
if (dollars >= invoice.getAmount()) {
Wallet w = c.getWallet();
w.subtract(invoice.getAmount()); // 위반
return true;
}
return false;
}
위의 예는 Customer의 payInvoice(Invoice invoice) 메서드로 더 잘 구현할 수 있습니다.
라이브러리 메서드 호출 및 라이브러리 필드 액세스 무시 옵션을 사용하여, 라이브러리를 변경하지 않고는 수정할 수 없는 데메테르의 법칙 위반을 무시합니다.