PYTHON · 디자인패턴
파사드 패턴
파사드 패턴으로 복잡한 서브시스템을 간단한 인터페이스 뒤에 숨깁니다.
디자인패턴중급facade파사드단순화인터페이스
핵심 설명
파사드 패턴으로 복잡한 서브시스템을 간단한 인터페이스 뒤에 숨깁니다.
Python code
# 복잡한 서브시스템들
class AuthService:
def verify_token(self, token: str) -> dict:
return {"user_id": 1, "role": "admin"}
class UserService:
def get_profile(self, user_id: int) -> dict:
return {"name": "Alice", "email": "alice@test.com"}
class PermissionService:
def check_access(self, role: str, resource: str) -> bool:
return role in ("admin", "editor")
class AuditService:
def log_access(self, user_id: int, resource: str):
print(f" [감사] 사용자 {user_id}이 {resource} 접근")
# 파사드: 복잡한 워크플로를 단순화
class APIFacade:
def __init__(self):
self._auth = AuthService()
self._user = UserService()
self._perm = PermissionService()
self._audit = AuditService()
def get_resource(self, token: str, resource: str) -> dict:
# 1. 인증
auth = self._auth.verify_token(token)
# 2. 프로필 조회
profile = self._user.get_profile(auth["user_id"])
# 3. 권한 확인
if not self._perm.check_access(auth["role"], resource):
raise PermissionError("접근 거부")
# 4. 감사 로그
self._audit.log_access(auth["user_id"], resource)
return {"user": profile, "resource": resource, "data": "..."}
# 클라이언트는 하나의 메서드만 호출
api = APIFacade()
result = api.get_resource("token123", "/api/data")
print(f"결과: {result['user']['name']}이 {result['resource']} 접근")학습 팁
파사드는 서브시스템을 숨기지만 직접 접근을 막지는 않습니다. 필요 시 서브시스템을 직접 사용할 수 있습니다.
주의할 점
파사드에 비즈니스 로직을 넣으면 God 클래스가 됩니다. 파사드는 위임만 하고 로직은 각 서비스에 두세요.
자주 묻는 질문
파사드 패턴란 무엇인가요?
파사드 패턴으로 복잡한 서브시스템을 간단한 인터페이스 뒤에 숨깁니다.
파사드 패턴 학습 시 주의할 점은 무엇인가요?
파사드에 비즈니스 로직을 넣으면 God 클래스가 됩니다. 파사드는 위임만 하고 로직은 각 서비스에 두세요.