객체 지향을 공부하는 와중 퍼사드 패턴이라는 것을 접하게 되었고 이를 완전히 이해하고자 블로그 글을 적습니다!
❓퍼사드 패턴?
우선 정의부터 살펴볼까요?
퍼사드(프랑스어: façade[fəˈsɑːd] 영어: facade) 패턴(외관 패턴)은 소프트웨어 공학 디자인 패턴 중 하나이다. 객체 지향 프로그래밍 분야에서 자주 쓰인다. Facade (외관)는 "건물의 정면"을 의미합니다.
복잡한 시스템이나 서브 시스템의 인터페이스를 단순화하는 데 사용됩니다. 이 패턴은 클라이언트가 복잡한 시스템의 일련의 서브 시스템과 직접 상호작용하는 대신, 단일 인터페이스를 제공하여 시스템과의 상호작용을 쉽게 만듭니다.
저는 이 글에서 눈에띄는 것은 단순화! 입니다.
자바스크립트의 예시를 보겠습니다.
// 복잡한 주문 시스템
class Inventory {
checkAvailability(item) {
// 재고 확인 로직
return Math.random() > 0.5; // 임의의 값으로 간소화
}
}
class Payment {
processPayment(amount) {
// 결제 로직
return `Payment of $${amount} processed`; // 간소화된 메시지
}
}
class Shipping {
shipProduct(item) {
// 배송 로직
return `Shipping ${item}`; // 간소화된 메시지
}
}
// 퍼사드 - 주문을 처리하는 단순한 인터페이스
class OrderFacade {
constructor() {
this.inventory = new Inventory();
this.payment = new Payment();
this.shipping = new Shipping();
}
placeOrder(item, amount) {
if (this.inventory.checkAvailability(item)) {
const paymentStatus = this.payment.processPayment(amount);
const shippingStatus = this.shipping.shipProduct(item);
return `Order placed for ${item}. ${paymentStatus}. ${shippingStatus}`;
} else {
return `Sorry, ${item} is out of stock.`;
}
}
}
// 클라이언트
const orderSystem = new OrderFacade();
const result = orderSystem.placeOrder('Smartphone', 500);
console.log(result);
Inventory, Payment, Shipping 이라는 객체가 있습니다. 이 객체들을 통해 결과값을 추출하려면 3개의 객체가 하나의 추상 레벨을 가리키게 됩니다. 만약 이러한 클래스들이 매우 많아져 복잡하게 얽힌다면 유지 보수 측면에서 굉장히 힘들어 질 것입니다. 이러한 상황에서 단일 퍼사드 인터페이스를 사용하여 복잡성을 숨길 수 있다는 것입니다. 다음 그림과 같습니다.
사용자는 직접 클래스에 접근하는 것이 아닌, 퍼사드 인터페이스에 접근한다는 것입니다.
이는 클래스 자체의 메서드를 숨김으로써 의존성을 낮출 수 있고, 사용자는 간소화된 퍼사드 인터페이스를 접함으로써 쉽게 사용할 수 있겠네요!
❗결론!
퍼사드 패턴은 수많은 디자인 패턴 중 하나입니다. 디자인 패턴에 대해 공부를 해보니, 아키텍처를 빌드해 나가는데 유용한 자산이 될 것 같다는 생각이 들었습니다! 배울 건 많다..
'개발 상식' 카테고리의 다른 글
[개발 상식] 쿠키, 세션, 토큰 어떤 차이일까? (0) | 2023.11.23 |
---|---|
[개발 상식] 정규표현식을 배우자! (0) | 2023.11.02 |
[개발 상식] git 불필요한 커밋을 합치는 방법. Rebase (0) | 2023.10.29 |
[개발 상식] 단위 테스트 (0) | 2023.10.26 |
[개발 상식] 들여쓰기가 코드 가독성에 미치는 영향 (0) | 2023.10.26 |