[c#] 데코레이터 패턴과 횡단 관심사
데코레이터 패턴은 객체의 기능을 동적으로 확장할 수 있는 구조적 디자인 패턴이다. 데코레이터 패턴은 객체를 래핑하여 새로운 기능을 추가할 수 있게 해준다. 한편, 횡단 관심사는 애플리케이션의 여러 부분에서 발생하는 로깅, 보안, 트랜잭션 관리 등과 같은 관심사를 의미한다.
데코레이터 패턴을 사용하여 횡단 관심사를 구현하면 핵심 비즈니스 로직과 횡단 관심사를 분리할 수 있다. 예를 들어, 트랜잭션 관리와 같은 횡단 관심사를 데코레이터로 구현하면 핵심 로직과 트랜잭션 관리 코드를 분리할 수 있어 유지보수성이 향상된다. 데코레이터 패턴을 활용하여 여러 횡단 관심사를 구현한 후 이를 조합하여 응용프로그램의 다양한 요구사항을 충족시킬 수 있다.
// 데코레이터 인터페이스
public interface IComponent
{
void Operation();
}
// 핵심 구성 요소
public class ConcreteComponent : IComponent
{
public void Operation()
{
Console.WriteLine("핵심 로직 수행");
}
}
// 데코레이터
public abstract class Decorator : IComponent
{
protected IComponent _component;
public Decorator(IComponent component)
{
_component = component;
}
public virtual void Operation()
{
if (_component != null)
_component.Operation();
}
}
// 횡단 관심사 데코레이터
public class CrosscuttingConcernDecorator : Decorator
{
public CrosscuttingConcernDecorator(IComponent component) : base(component) { }
public override void Operation()
{
// 횡단 관심사 코드 작성
Console.WriteLine("횡단 관심사 처리");
base.Operation();
}
}
// 클라이언트 코드
static void Main(string[] args)
{
IComponent component = new ConcreteComponent();
component = new CrosscuttingConcernDecorator(component);
component.Operation();
}
데코레이터 패턴을 적용하여 횡단 관심사를 처리할 때는 객체 간에 강한 의존 관계를 생성하지 않으므로 유연한 확장이 가능하다. 이로 인해 애플리케이션의 인스턴스를 유연하게 구성할 수 있어 개발 및 유지보수가 용이해진다.
참고문헌:
- Gamma, E. et al. (1994). Design Patterns: Elements of Reusable Object-Oriented Software. Reading, MA: Addison Wesley.