디미터의 법칙
디미터의 법칙(Law of Demeter)은 “한 객체는 자신이 직접 아는 대상에게만 말을 걸어야 한다”는 원칙이다. 최소 지식 원칙(Principle of Least Knowledge)이라고도 한다. 어떤 컴포넌트가 다른 컴포넌트의 내부 구현을 속속들이 알고 그 안까지 파고들어 조작하면, 두 컴포넌트가 강하게 결합되어 한쪽 변경이 다른 쪽을 깨뜨리기 때문이다.
구체적으로 한 메서드는 자기 자신, 자신의 필드, 인자로 받은 객체, 자신이 만든 객체 정도에게만 메시지를 보내야 한다. 남에게 받은 객체가 또 물고 있는 내부 객체까지 꺼내 쓰지 말라는 것이다. a.getB().getC().doSomething()처럼 점(.)이 길게 이어지는 호출이 전형적인 위반 신호다. 이런 코드는 a가 B의 구조를, 다시 C의 구조를 모두 알고 있다는 뜻이라, 중간 구조가 바뀌면 이 호출도 함께 깨진다. 대신 필요한 동작을 바로 아는 대상에게 요청하고, 그 대상이 자기 내부 객체에게 위임하도록 만든다. 호출하는 쪽은 “무엇을 해달라”고만 말하고 “어떻게 하는지”는 상대에게 맡기는 것이다. 이렇게 하면 내부 구현이 밖으로 새지 않아 결합도가 낮아진다.
응집도와 결합도에서 결합도를 낮추려는 목표와 같은 방향이며, 인프라 컴포넌트 설계에서도 한 컴포넌트가 다른 컴포넌트의 구현 방식을 몰라야 한다는 규칙으로 그대로 적용된다.
참고