디미터 법칙
디미터 법칙 : 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다.(최소한의 지식 원칙)
객체는 자료를 숨기고 함수를 공개한다, 즉 객체는 조회 함수로 내부 구조를 공개하면 안된다는 의미이다.
클라이언트 객체가 서버 객체를 사용할 때 서버 구조에 대해 가능한 적게 알아야 한다.
서버의 속성과 모양은 클라이언트에 의해 완전히 알려지지 않은 상태로 유지되어야 한다.
클라이언트는 서버에 접근하여 내부를 묻고 해당 내부에게 명령을 내려서는 안된다.
클라이언트가 서버의 내부에 의해 렌더링되는 서비스가 필요한 경우, 클라이언트는 반드시 서버 내부의 접근 권한을 부여받으면 안된다. 대신 서버 객체는 오직 표면 인터페이스(surface interface)를 제공해야한다.
디미터 법칙의 기본적인 요약은 다음과 같다.
"클래스 C의 메서드 f는 다음과 같은 객체의 메서드만 호출해야 한다"
- 클래스 C
- f가 생성한 객체
- f메서드에게 전달되는 모든 매개변수
- C 인스턴스 변수에 저장된 객체
묻지 말고 시켜라
- 클라이언트 객체는 반드시 서버 객체가 갖고 있는 부분을 물어보지 말아야한다.
- 객체 스스로 상태를 보고 결정을 내리게 해야한다.
- 그리고 서버 객체에게 무언가 하라고 지시해야 한다.
- 대신 클라이언트는 서버의 공용 인터페이스에서 제공하는 명령을 사용하여 서버에게 내릴 명령을 “지시"해야 한다.
객체 간의 결합도를 낮추고, 자율성을 높여 서로 협력할 수 있도록 하는 것
이렇게 A 객체가 어떤 책임을 수행하다가 B 객체의 도움이 필요하면 B 객체에게 일을 시키고, 이때 또 C 객체의 도움이 필요하면 B 객체가 C 객체에게 도움을 요청하면서 객체의 협력이 이루어진다.
원칙에 매몰되지 않고 최선을 선택하는 게 가장 좋다
참고한 사이트 : https://prohannah.tistory.com/204