서브시스템에 있는 일련의 인터페이스를 통합 인터페이스로 묶어 준다.
또한 고수준 인터페이스도 정의하므로 서브시스템을 더 편리하게 사용할 수 있다.
✅ 인터페이스를 단순하게 만들고 클라이언트와 구성 요소로 이루어진 서브시스템을 분리하는 역할
✅ 퍼사드와 어댑터는 모두 여러 개의 클래스를 감쌀 수 있다.
✅ 어댑터는 인터페이스를 다른 인터페이스로 변환하는 용도
✅ 퍼사드는 인터페이스를 단순하게 만드는 용도
최소 지식 원칙(Principle of Least Knowledge)에 따르면 객체 사이의 상호작용은 될 수 있으면 가장 가까운 친구 사이에서만 허용하는 편이 좋다. (진짜 절친에게만 이야기해야 한다.)
시스템을 디자인할 때 어떤 객체든 그 객체와 상호작용하는 클래스의 개수와 상호작용 방식에 주의를 기울여야 한다.
친구를 만들지 않는 4개의 가이드라인
1. 객체 자체
2. 메소드에 매개변수로 전달된 객체
3. 메소드를 생성하거나 인스턴스를 만든 객체
4. 객체에 속하는 구성 요소

HeadFirst DesignPattern - 한빛미디어