[python] 데코레이터 디자인 패턴
데코레이터 디자인 패턴은 객체에 새로운 기능을 동적으로 추가하기 위해 사용되는 패턴입니다. 이 패턴을 사용하면 기존 객체를 수정하지 않고도 객체에 새로운 기능을 추가할 수 있습니다. 데코레이터는 기존 객체를 래핑하고, 추가된 기능을 처리한 후에 원래 객체에 제어를 전달합니다. 이러한 방식으로 데코레이터는 객체의 동작을 확장하거나 수정할 수 있습니다.
데코레이터 디자인 패턴의 구조
데코레이터 디자인 패턴은 다음과 같은 구조로 구성됩니다:
- Component: 기본적인 기능을 제공하는 인터페이스 또는 추상 클래스입니다.
- ConcreteComponent: Component의 구현입니다.
- Decorator: Component를 래핑하는 인터페이스 또는 추상 클래스입니다.
- ConcreteDecorator: Decorator의 구현입니다. 기본 Component에 새로운 기능을 추가하는 역할을 합니다.
데코레이터 디자인 패턴의 예시
데코레이터 디자인 패턴은 많은 프로그래밍 환경에서 사용될 수 있습니다. 예를 들어, 웹 서비스에서 사용자 인증 기능을 추가하는 경우를 생각해봅시다. 데코레이터를 사용하면 웹 서비스의 기존 기능을 수정하지 않고도 인증 기능을 유연하게 추가할 수 있습니다.
class WebService:
def handle_request(self, request):
# 웹 서비스 요청 처리 로직
pass
class AuthDecorator:
def __init__(self, web_service):
self.web_service = web_service
def handle_request(self, request):
if self.authenticate(request):
self.web_service.handle_request(request)
else:
# 인증 실패 처리 로직
pass
def authenticate(self, request):
# 인증 로직
pass
# 웹 서비스 객체 생성
web_service = WebService()
# 인증 데코레이터를 통해 웹 서비스에 인증 기능 추가
auth_web_service = AuthDecorator(web_service)
# 인증 데코레이터를 통해 웹 서비스 요청 처리
auth_web_service.handle_request(request)
위의 예시에서 WebService
클래스는 기본적인 웹 서비스 기능을 제공하고, AuthDecorator
클래스는 웹 서비스에 인증 기능을 추가합니다. AuthDecorator
는 WebService
객체를 래핑하고, 요청이 들어오면 인증을 수행한 후 웹 서비스의 핸들러 함수를 호출합니다.
데코레이터 디자인 패턴의 장점
데코레이터 디자인 패턴은 다음과 같은 장점을 가지고 있습니다:
- 기존의 코드를 수정하지 않고도 객체에 새로운 기능을 동적으로 추가할 수 있습니다.
- 기능 간의 결합도를 낮추어 코드를 보다 유연하게 만듭니다.
- 단일 책임 원칙을 준수하여 객체의 구현과 책임을 분리합니다.
결론
데코레이터 디자인 패턴은 객체에 새로운 기능을 동적으로 추가하기 위한 강력한 도구입니다. 이 패턴을 사용하면 기존 객체를 수정하지 않고도 객체의 기능을 확장 또는 수정할 수 있습니다. 데코레이터 디자인 패턴은 유연하고 확장 가능한 소프트웨어를 개발하는 데 도움이 될 수 있습니다.