간단히 요약하면, 객체의 내부 구조에 강하게 결합되지 않도록 협력 경로를 제한하는 것
모든 클래스 C
와 C에 구현된 모든 메서드 M
에 대해서, M
이 메세지를 전송할수 있는 모든 객체는
M
의인자로 전달된 클래스(C
자체를 포함) [M
에 의해 생성된 객체, 호출하는 메서드에 의해 생성된 객체 모두]C
의 인스턴스 변수의 클래스여야 한다.
더 쉽게 설명하면
this
객체this
의 속성this
의 속성인 컬렉션의 요소public Reservation reserve(Screening screening, Customer customer, int audienceCount) {
Money fee = screening.calculateFee(audienceCount);
return new Reservation(customer, screening, fee, audienceCount);
}
위의 코드에서 객체
는 메서드에 인자로 전달된 Screening
인스턴스에게만 메세지를 전송한다.
객체
는 Screening
내부의 어떠한 정보도 알지 못한다. 즉 내부 구조에 결합돼 있지 않기 때문에 Screening
내부 구현을 변경할 때 객체
를 변경할 필요가 없다.