[c#] 데코레이터 패턴의 유연성

데코레이터 패턴은 객체의 기능을 동적으로 확장할 수 있는 유연한 설계 패턴 중 하나입니다. 이 패턴을 사용하면 기존의 객체를 수정하지 않고도 기능을 추가하거나 수정할 수 있습니다.

데코레이터 패턴이란?

데코레이터 패턴은 객체지향 프로그래밍에서 사용되는 구조적 디자인 패턴으로, 객체에 동적으로 새로운 책임을 추가하는 패턴입니다. 이 패턴은 객체를 감싸서 새로운 동작이나 책임을 추가합니다.

데코레이터 패턴의 구조

데코레이터 패턴은 일반적으로 다음과 같은 구조를 가집니다.

public interface IComponent
{
    void Operation();
}

public class ConcreteComponent : IComponent
{
    public void Operation()
    {
        // 구체적인 동작 수행
    }
}

public abstract class Decorator : IComponent
{
    protected IComponent component;

    public Decorator(IComponent component)
    {
        this.component = component;
    }

    public virtual void Operation()
    {
        component.Operation();
    }
}

public class ConcreteDecoratorA : Decorator
{
    public ConcreteDecoratorA(IComponent component) : base(component)
    {
    }

    public override void Operation()
    {
        // 새로운 동작 추가
        base.Operation();
    }
}

public class ConcreteDecoratorB : Decorator
{
    public ConcreteDecoratorB(IComponent component) : base(component)
    {
    }

    public override void Operation()
    {
        // 새로운 동작 추가
        base.Operation();
    }
}

위의 코드는 데코레이터 패턴을 구현한 간단한 예시입니다. IComponent는 기본 동작을 정의하는 인터페이스이고, ConcreteComponent는 이를 구체화한 클래스입니다. Decorator는 데코레이터의 기본이 되는 추상 클래스이며, 실제 데코레이터들은 이 클래스를 상속받아 구현됩니다.

데코레이터 패턴의 장점

데코레이터 패턴은 객체의 기능을 동적으로 확장할 수 있는 유연한 설계 패턴이기 때문에, 다음과 같은 장점을 가집니다.

마무리

데코레이터 패턴은 객체지향 설계의 유연성을 극대화할 수 있는 강력한 도구입니다. 객체의 동작을 동적으로 확장해야 하는 경우에는 데코레이터 패턴을 적용하여 설계하는 것이 좋은 선택일 수 있습니다.


참고문헌: