Facade
는 프랑스어 façade
에서 유래된 단어로 건물의 외관이나 정면을 의미합니다.
Facade Pattern
은 소프트웨어 공학의 Design Pattern
중 하나입니다.
객체 지향 프로그래밍
에서 자주 쓰입니다.
복잡하고 방대한 클래스 라이브러리의 코드는 접근이 어렵고 사용성도 떨어집니다.
그래서 해당 코드를 쉽게 사용할 수 있도록, 간편한 인터페이스를 제공합니다.
퍼사드 패턴을 사용하는 이유는 간편한 인터페이스 제공과 사용성 향상에 있습니다.
퍼사드 패턴의 기본 구조는 Client - Facade API - Subsystem
입니다.
원래 Client는 각각의 Subsystem을 개별적으로 접근해야 합니다.
하지만 퍼사드 패턴을 적용하면 퍼사드 API에만 접근해서 각각의 Subsystem 기능을 사용할 수 있습니다.
퍼사드 패턴은 래퍼(Wrapper)
가 특정 인터페이스를 준수해야 합니다.
따라서 원본 라이브러리의 기능을 간편하게 제공하는 목적이 있습니다.
만약 다형성(Polymorphism)
을 지원하고 싶다면, 어댑터 패턴(Adapter pattern)
을 사용해야 합니다.
고객이 주식을 주문하는 간단한 로직입니다.
고객 주문이 발생하면, Payment - Order - Stock
클래스의 메서드를 호출해야 합니다.
하지만 퍼사드 패턴을 활용하면, Customer
클래스의 메서드만 호출하면 끝납니다.
//Complex parts class Payment { public void takePayment() { ... } ... } class Order { public void createOrder() { ... } ... } class Stock { public void adjustStock() { ... } ... } //Facade class Customer { public void placeOrder() { Payment payment = new Payment(); Order order = new Order(); Stock stock = new Stock(); payment.takePayment(); order.createOrder(); stock.adjustStock(); } } //Client class You { public static void main(String[] args) { Customer customer = new Customer(); customer.placeOrder(); } }
복합 서브 컴포넌트의 메서드를 일일이 호출할 필요가 없습니다.
간편한 퍼사드 API를 활용할 수 있습니다.
공장 안에서 어떤 일을 수행하는지 파악할 필요가 없습니다.
입구에서 필요한 내용을 요청하면 간편하게 전달 받을 수 있습니다.