# 퍼사드 패턴 ## 정의 - 서브시스템에 있는 일련의 인터페이스에 대한 통합 인터페이스를 제공 - 서브시스템을 더 쉽게 사용할 수 있게 해주는 고수준 인터페이스 정의 ## 특징 - 다른 패턴과 비교 - 데코레이터 - 인터페이스는 바꾸지 않고 책임(기능)만 추가 - 어댑터 - 한 인터페이스를 다른 인터페이스로 변환 - 퍼사드 - 일련의 객체들을 감싸서 단순화 ### 최소 지식 원칙 - 꼭 필요한 최소한의 객체와만 상호작용하라 - 객체 자체 - 메서드에 매개변수로 전달된 객체 - 메서드에서 생성한 객체 - 객체에 속하는 구성요소 - 여러 클래스들이 복잡하게 얽혀서 시스템의 한 부분을 변경했을 때 다른 부분까지 줄줄이 고쳐야 하는 상황을 미리 방지 - 객체들 사이의 의존성을 줄일 수 있지만, 다른 구성요소에 대한 메서드 호출을 처리하기 위한 래퍼 클래스가 많아져 시스템이 복잡해질 수 있음 ## 장단점 ### 장점 - 단순화된 인터페이스를 제공하면서도, 클라이언트에서 필요로 한다면 시스템의 모든 기능을 사용할 수 있도록 해 줌 - 클라이언트 구현과 퍼사드 내부 구현(서브시스템)을 분리할 수 있음(최소 지식 원칙) ### 단점 - 다른 구성요소에 대한 메소드 호출을 처리하기 위해 "래퍼" 클래스를 많이 만들어야 할 수 있음 ### 단점을 해결할 순 없을까..? - 꼭 필요할때만 사용하고 객체 설계를 잘하자! ## 예시 - 큰 인터페이스, 또는 여러 인터페이스를 단순화시키거나 통합시켜야 할 때 - 하위 시스템의 추상화, 구현이 밀접하게 결합되어 있을 때 - 각각의 소프트웨어 계층에 진입점이 필요할 때 - 컴퓨터 - CPU, Memory, HardDrive ## Code ## Reference - Head First Design Patterns