alt
Home 디미터 법칙(law of demeter)
Post
Cancel

디미터 법칙(law of demeter)


객체가 자기 자신을 책임지는 자율적인 존재이다. 따라서 객체 내부 구조를 묻지 말고 무언가를 시켜라. 이렇게 하면 객체 내부를 바깥으로 노출시키지 않게 된다.


디미터 법칙을 어긴 코드

1
2
3
4
object.getChild()
  .getContent()
  .getItem()
  .getTitle();
  • 기차 충돌(train wreck) : 이와 같이 getter 가 줄줄이 이어진 코드
    • 이러한 설계는 객체들이 어떻게 연결되어있는지를 보여준다.
    • 객체 구조(연결)이 변경될 수 있으므로 프로그램은 불안정해진다.


디미터 법칙이 하나의 .을 강제하는 규칙은 아니다.

1
2
3
4
IntStream.of(1, 15, 2)
  .filter(x -> x > 10)
  .distinct()
  .count();
  • stream을 사용한 해당 코드는 하지만 of, filter, distinct 메서드는 모두 IntStream 이라는 동일한 클래스 인스턴스를 반환한다. 즉 이들은 IntStream 인스턴스를 또다른 IntStream인스턴스로 변환할 뿐.


디미터 법칙은 객체 결합도와 관련 된 것.

  • 객체의 내부구조가 외부로 노출되는 경우에 해당된다.

    1
    2
    3
    4
    
    object.getChild()
      .getContent()
      .getItem()
      .getTitle();
    
  • 디미터 법칙을 지킬수록 결합도는 느슨해진다.



Reference)

https://woowacourse.github.io/javable/post/2020-06-02-law-of-demeter/

This post is licensed under CC BY 4.0 by the author.