디미터 법칙(Law of Demeter)

Pandahun·2020년 4월 21일
0

데메테르 법칙이라고도 한다


의미

  • 협력하는 객체의 내부 구조에 대한 결합으로 인해 발생하는 설계 문제를 해결하기 위해 제안된 원칙.

간단히 요약하면, 객체의 내부 구조에 강하게 결합되지 않도록 협력 경로를 제한하는 것


모든 클래스 CC에 구현된 모든 메서드 M에 대해서, M이 메세지를 전송할수 있는 모든 객체는

  • M의인자로 전달된 클래스(C자체를 포함) [M에 의해 생성된 객체, 호출하는 메서드에 의해 생성된 객체 모두]
  • C의 인스턴스 변수의 클래스

여야 한다.
더 쉽게 설명하면

  • this 객체
  • 메서드의 매개변서
  • this의 속성
  • this의 속성인 컬렉션의 요소
  • 메서드 내에서 생성된 지역 객체

예제

public Reservation reserve(Screening screening, Customer customer, int audienceCount) {
        Money fee = screening.calculateFee(audienceCount);
        return new Reservation(customer, screening, fee, audienceCount);
    }

위의 코드에서 객체는 메서드에 인자로 전달된 Screening 인스턴스에게만 메세지를 전송한다.

객체Screening 내부의 어떠한 정보도 알지 못한다. 즉 내부 구조에 결합돼 있지 않기 때문에 Screening 내부 구현을 변경할 때 객체를 변경할 필요가 없다.


결과

  • 디미터 법칙을 사용하면, 불필요한 어떤 것도 다른 객체에 보여주지 않으며, 다른 객체의 구현에 의존하지 않게 된다.
  • 즉, 메세지 수신자의 내부 구조가 전송자에게 노출되지 않고 메세지 전송자는 수신자의 내부 구조에 결합되지 않는다.
  • 따라서, 전송자와 수신자 사이에 낮은 결도를 유지할 수 있다.
profile
개발하는팬더

0개의 댓글