PHpullh

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 클래스가 됩니다. 파사드는 위임만 하고 로직은 각 서비스에 두세요.

Continue Learning

Python 학습을 이어가세요

총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.