[Object] 디미터의 법칙(Law of Demeter)

업데이트:

디미터의 법칙은 객체의 내부 구조에 강하게 결합되지 않도록 협력 경로를 제한하는 것이다.

아래와 같이 요약할 수 있다.

  • “낯선 자에게 말하지 말라”
  • “오직 인접한 이웃하고만 말하라”
  • “오직 하나의 도트만 사용하라”

디미터의 법칙을 만족하기 위해서 아래 조건을 만족하는 인스턴스에만 메시지를 전송하도록 프로그래밍해야 한다.

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

디미터의 법칙을 따르면 부끄럼타는 코드(shy code) 를 작성할 수 있다. shy code란 불필요한 어떤 것도 다른 객체에게 보여주지 않으며, 다른 객체의 구현에 의존하지 않는 코드를 말한다.

디미터의 법칙은 캡슐화를 다른 관점에서 표현한 것이다. 디미터의 법칙이 가치 있는 이유는 클래스를 캡슐화하기 위해 따라야 하는 구체적인 지침을 제공하기 때문이다.

다음은 디미터의 법칙을 위반하난 코드이다.

screening.getMovie().getDiscountCondition();

이와 같은 코드를 기차 충돌(train wreck) 이라고 부른다.

아래 코드는 디미터의 법칙을 따르도록 한 것이다.

screening.calculateFee(audienceCount);

위와 같이 코드를 개선하면 메시지 전송자는 더 이상 메시지 수선자의 내부 구조에 관해 묻지 않게 된다.

Reference

오브젝트, 코드로 이해하는 객체지향 설계

카테고리:

업데이트:

댓글남기기