263. 퍼사드 (Facade) - 서브시스템 단일 인터페이스 구조 패턴 복잡성 은닉 결합도 감소 시스템 통합 GoF
핵심 인사이트: (시스템의 거대한 가림막) 내가 극장에서 영화를 보려면, 1. 스크린 내려라, 2. 에어컨 꺼라, 3. 조명 꺼라, 4. 영사기 켜라... 이 4대의 쇳덩어리 기계 버튼(클래스들)을 일일이 순서대로 눌러야 한다. 손님이 직접 이 버튼들을 조작하다간 스크린이 찢어진다. "야 ㅆㅂ!! 손님한테 이 복잡한 기계들(서브시스템)의 스위치를 직접 보여주지 마!! 저 복잡한 기계들 100대 앞을 아예 '거대한 벽(가림막)'으로 싹 가려버려!! 그리고 그 벽 정중앙에 딱 하나, 존나 큰 [영화 시작] 빨간 버튼(Facade) 하나만 예쁘게 달아놔!! 손님이 그 버튼 하나만 딸깍 누르면? 그 벽 뒤에 숨어있는 비서(Facade 객체)가 알아서 스크린 내리고 불 끄고 영사기 트는 10단 콤보를 0.1초 만에 대신 조작해 주잖아!!" 거미줄처럼 얽힌 끔찍한 시스템의 속살을 완벽하게 가려버리는 가장 우아한 1차원 정문, 퍼사드(Facade)다.
Ⅰ. 서브시스템의 복잡성과 사용자 멘붕
- 엔터프라이즈 시스템은 수십 개의 복잡한 클래스(서브시스템)들로 이루어져 있습니다.
주문 모듈,결제 모듈,재고 모듈,배송 모듈...- 클라이언트(사용자 폰 앱)가 물건 하나 사겠다고 이 4개의 모듈을 직접 일일이 찾아가서
순서 1, 순서 2...하면서 함수를 호출하면 어떻게 될까요? 클라이언트 코드가 미친 듯이 더러워지고 결합도(Coupling)가 우주 끝까지 치솟습니다.
Ⅱ. 퍼사드 (Facade) 패턴의 개념 🌟
- Facade (건물의 정면, 외관, 껍데기)
- 개념: GoF 구조 패턴 중 하나로, 수많은 클래스들로 얽히고설킨 거대하고 복잡한 서브시스템의 속살을 밖에서 보이지 않게 가려버리고, 대신 사용자가 아주 쉽게 시스템을 조작할 수 있도록 단순하고 큼직한 '통합된 단일 인터페이스(정문 입구)'를 하나 떡하니 세워서 제공해 주는 설계 패턴입니다.
Ⅲ. 퍼사드의 절대 권력 🌟 핵심 기출 🌟
1. 극강의 캡슐화 (은닉)와 결합도 박살
- 퍼사드 객체를 세워두면, 외부의 사용자(클라이언트)는 이 퍼사드 건물 입구하고만 통신(의존)합니다. 건물 안쪽에 결제 클래스가 있는지 배송 클래스가 있는지 알 바가 아닙니다.
- 대승리: 나중에 결제 클래스가 오라클에서 카카오페이로 싹 뜯어고쳐져도, 외부 사용자는 코드를 1줄도 수정할 필요가 없습니다. 퍼사드가 뒤에서 통신만 살짝 바꿔치기해 주면(은닉), 밖에서는 아무 일도 없었던 것처럼 똑같이 작동합니다.
2. 사용의 초간편화 (High-level Interface)
- 사용자가 복잡한 순서도나 매뉴얼을 외울 필요가 없습니다.
- 그냥 퍼사드 클래스에 뚫려있는
orderItem(상품번호)함수 딱 1개만 때리면 끝입니다. - 퍼사드는 224번 **ACL(안티 코럽션 레이어)**에서 낡은 레거시 시스템의 더러운 호출 방식을 가려버릴 때 가장 1순위로 채택되는 무적의 방패입니다.
Ⅳ. 259번 어댑터(Adapter)와의 치명적 차이 🌟 무조건 암기 🌟
모양새가 비슷해서 시험에서 100% 헷갈리게 냅니다.
- 어댑터 (Adapter): A 구멍과 B 플러그가 **'호환되지 않는 에러'를 해결(번역)**하기 위해 중간에 끼우는 변환기입니다. 1:1 통역사 느낌입니다.
- 퍼사드 (Facade): 호환이 안 되는 게 아닙니다! 그냥 '사용법이 너무 복잡해서' 사용자를 편하게 해주려고(단순화) 세우는 거대한 안내데스크 비서입니다. 1:N 통제사 느낌입니다.
📢 섹션 요약 비유: 퍼사드(Facade) 패턴은 호텔 로비의 **'만능 컨시어지(안내데스크 비서)'**와 같습니다. 손님이 호텔에 도착해 룸서비스, 세탁, 마사지, 렌터카를 예약하려고 합니다. 바보 같은 손님(퍼사드가 없는 클라이언트)은 주방, 세탁실, 마사지실 전화번호를 다 뒤져서 일일이 4통의 전화를 걸고 스케줄을 조율하며 진땀을 뺍니다(복잡한 서브시스템 직접 의존). 이 끔찍한 노가다를 없애는 것이 퍼사드입니다. 최고급 호텔은 손님이 방에서 다이렉트로 주방이나 세탁실에 전화하는 걸 막아버립니다. 손님은 오직 전화기에 있는 유일한 '0번(만능 컨시어지 데스크 = 퍼사드)' 버튼 딱 1개만 누릅니다! "나 내일 아침 9시에 밥 먹고 세탁된 옷 입고 마사지받게 풀코스 세팅해 줘!" 손님은 이 한마디만 하고 잡니다(단일 인터페이스 호출). 그럼 전화기 너머의 비서(퍼사드)가 지 혼자 땀을 뻘뻘 흘리며 주방, 세탁실, 마사지실에 연락해 순서를 다 짜맞춰(내부 서브시스템 조작) 완벽하게 세팅해 둡니다. 세탁기 기계가 고장 나서 LG에서 삼성으로 바뀌든 말든, 손님은 비서(퍼사드)만 믿고 꿀을 빨게 만들어주는 궁극의 복잡성 은닉 서비스입니다.