- 파사드 패턴(Facade Pattern)2025년 03월 25일
- 2료일
- 작성자
- 2025.03.25.오후06:59
: 구조적 디자인 패턴 중 하나로, 복잡한 라이브러리, 프레임워크 또는 서브시스템을 간단한 인터페이스로 감싸주는 역할을 한다.
이로써 클라이언트가 시스템의 복잡성을 이해하지 않고도 필요한 기능을 쉽게 사용할 수 있게 해준다.
파사드? 프랑스어로 건물의 정면이라는 듯. 실제 건물에서 정면은 내부의 복잡한 구조를 가리고 단순한 외관만을 보여주는것처럼 소프트웨어에서도 복잡한 내부 구조를숨기고 단순한 인터페이스만 외부에 노출시키겟다~
ex) 무신사 옷 CS주문 넣는다고 하자. 상담원이 파사드 역할이다. 상담원이 매장의 시스템에 맞춰 해당하는 대응을 해주고 우리는 그냥 전화하는것만으로도 충분하다.
// 재고 관리 서브시스템 class InventorySystem { func checkAvailability(productId: String) -> Bool { print("재고 확인 중: \(productId)") return true // 예시로 항상 재고가 있다고 가정 } } // 결제 처리 서브시스템 class PaymentSystem { func processPayment(amount: Double) -> Bool { print("결제 처리 중: \(amount)원") return true // 결제 성공 가정 } } // 배송 준비 서브시스템 class ShippingSystem { func prepareShipping(productId: String) { print("배송 준비 중: \(productId)") } } class OrderFacade { private let inventory = InventorySystem() private let payment = PaymentSystem() private let shipping = ShippingSystem() func placeOrder(productId: String, amount: Double) -> Bool { // 1. 재고 확인 guard inventory.checkAvailability(productId: productId) else { print("재고 부족으로 주문 실패") return false } // 2. 결제 처리 guard payment.processPayment(amount: amount) else { print("결제 실패") return false } // 3. 배송 준비 shipping.prepareShipping(productId: productId) print("주문 완료!") return true } }
클라는 파사드를 호출하기만 하면됌.
장점
낮은 결합도: Client가 서브들의 코드를 몰라도 된다 그저 Facade Object만 알면된다. 자연스레 서브들의 복잡한 결합도도 낮출 수 있다.
파사드 패턴 활용 예시
이미 우리가 사용했던 UIKit에서는 많은 파사드 패턴을 사용하고 있다.
UIViewController: 뷰 계층 구조, 생명 주기 이벤트 등 복잡한 작업을 캡슐화
UIAlertController: 알림과 액션 시트의 복잡한 구성과 표시 로직 단순화
다른 패턴들과 비교
1. 어뎁터 패턴: 기존 클래스의 인터페이스를 클라이언트가 원하는 다른 형태로 변환!!! 파사드는 새로운 인터페이스 제공
2. 데코레이터 패턴: 기존 객체에 새로운 기능을 동적으로 추가. 파사드는 기능 추가보다는 단순화가 목표
참고자료
https://refactoring.guru/design-patterns/facade
Facade
Intent Facade is a structural design pattern that provides a simplified interface to a library, a framework, or any other complex set of classes. Problem Imagine that you must make your code work with a broad set of objects that belong to a sophisticated
refactoring.guru
'디자인패턴' 카테고리의 다른 글
팩토리 패턴 (0) 2025.03.25 Adaptor Pattern (구조적 디자인패턴) (0) 2025.03.24 다음글이전글이전 글이 없습니다.댓글