Facade Pattern
Structural Pattern
Intro
일반적으로 비즈니스 로직은 구현 세부 정보와 밀접하게 결합되어 이해하고 유지 관리가 어렵다.
복잡하고 하위 시스템에 대한 간단한 인터페이스를 제공하는 기능이 필요
간단한 인터페이스는 클라이언트가 정말로 관심을 갖는 기능만을 말한다.
파사드가 제공하는 기능
인터페이스 또는 하위 시스템의 복잡성을 숨길 수 있는 기능 제공
파사드의 규칙
Facade는 새 인터페이스를 정의하는 반면 Adapter는 이전 인터페이스를 사용한다.
Adapter는 완전히 새로운 인터페이스를 정의하는 것과 반대로 두 개의 기존 인터페이스가 함께 작동하도록 한다.
Adapter와 Facade는 서로 다른 종류의 래퍼이다.
Facade의 목적은 더 간단한 인터페이스를 생성하는 것이고, Adapter의 목적은 기존 인터페이스를 설계하는 것이다.
Facade는 일상적으로 여러 개체를 래핑하고, Adapter는 단일 개체를 래핑한다.
Facade는 하나의 복잡한 개체의 Front-end 역할을 할 수 있고, Adapter는 여러 레거시 개체를 래핑할 수 있다.
Flyweight는 많은 작은 개체를 만드는 방법을 보여주지만 Facade는 단일 개체가 전체 하위 시스템을 나타내는 방법을 보여준다.
Adapter와 Facade의 차이는 레거시 클래스 구조를 래핑하느냐의 차이가 아니라 의도로 구분할 수 있다.
Adapter: 하나 이상의 클래스의 인터페이스를 클라이언트가 예상하는 하나의 인터페이스로 변경하여 제공
Facade: 복잡한 인터페이스를 가진 단일 클래스에 대한 단순화 된 인터페이스 제공
체크 리스트
하위 시스템 또는 구성 요소를 위한 더 간단하고 통합된 인터페이스를 식별한다.
서브 시스템을 캡슐화하는 래퍼클래스를 디자인 한다.
파사드 / 래퍼는 구성 요소의 복잡성과 공동 작업을 캡처하고 적절한 메서드에 위임한다,
클라이언트는 Facade만 사용한다.
추가
Facade
가 가치를 더할 수 있는지 고려해야 한다.
파사드 패턴의 장점
파사드 패턴은 클라이언트가 모든 복잡한 하위 시스템 클래스를 처리할 필요가 없도록 보호하므로 하위 시스템과 클라이언트 간에 느슨한 결합이 생성된다.
요청이 많은 경우 파사드는 요청을 적절한 하위 시스템으로 전달하고 그 사이에 필요한 번역을 수행할 수 있다.
Java API
javax.faces.context.ExternalContext 클래스는 내부적으로 HttpSession, HttpServletRequest 및 기타 클래스를 사용한다.
주의사항
일반적으로 단일 파사드 객체가 필요하며 싱글톤으로 구현된다.
Last updated