객체지향 애플리케이션에서 가장 중요한 재료는 클래스가 아니라 객체들이 주고받는 메시지다. 클래스 사이의 정적인 관계에서 메시지 사이의 동적인 흐름으로 초점을 전환하는 것이 중요하다.
오직 인접한 이웃과만 말하라.
자바에서라면 오직 . 하나만 사용해라. (객체들의 협력 경로를 제한하라.) → screening.getMovie().getFee() 이런식으로 쓰지마라. 이렇게 쓰면 의존하는 객체들이 많아지고 그렇게되면 캡슐화가 깨져 변화에 취약해진다.
즉, 인자로 전달된 클래스 혹은 인스턴스 변수의 클래스하고만 대화하라.
디미터 법칙을 따르면 메시지 수신자의 내부구조가 전송자에게 노출되지 않으며, 클라이언트는 수신자의 내부 구현에 결합되지 않는다. 따라서 클라와 서버 간의 낮은 결합도를 유지할 수 있다.
디미터 법칙을 어기면 캡슐화가 무너지고, 내부 구현에 강하게 결합되며, 변경에 취약한 코드를 만들어낸다.
194쪽은 디미터 법칙 위반해서 안돼! 라고하고 210쪽에서는 같은 형식인데 왜 괜찮다고하는거지? 차이가 뭐임?