[c#] 데코레이터 패턴과 믹스인

데코레이터 패턴과 믹스인은 객체 지향 프로그래밍에서 유용한 디자인 패턴 및 기법입니다. 이번 포스트에서는 C#에서 데코레이터 패턴과 믹스인을 어떻게 구현하는지 알아보겠습니다.

데코레이터 패턴

데코레이터 패턴은 객체에 새로운 기능을 추가하기 위해 사용됩니다. 이 패턴을 사용하면 기본 객체를 수정하지 않고, 동적으로 기능을 확장할 수 있습니다.

public interface IComponent
{
    string Operation();
}

public class ConcreteComponent : IComponent
{
    public string Operation()
    {
        return "ConcreteComponent";
    }
}

public abstract class Decorator : IComponent
{
    private IComponent _component;

    public Decorator(IComponent component)
    {
        _component = component;
    }

    public virtual string Operation()
    {
        return _component.Operation();
    }
}

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

    public override string Operation()
    {
        return $"ConcreteDecoratorA({base.Operation()})";
    }
}

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

    public override string Operation()
    {
        return $"ConcreteDecoratorB({base.Operation()})";
    }
}

// Usage
IComponent component = new ConcreteComponent();
IComponent decoratedComponent = new ConcreteDecoratorA(new ConcreteDecoratorB(component));
Console.WriteLine(decoratedComponent.Operation());

믹스인

믹스인은 다중 상속을 서브 클래스에서 지원하는 디자인 패턴입니다. C#에서는 명시적 인터페이스 구현을 통해 믹스인을 구현할 수 있습니다.

public interface IFly
{
    void Fly();
}

public interface ISwim
{
    void Swim();
}

public class Bird : IFly
{
    public void Fly()
    {
        Console.WriteLine("Flying");
    }
}

public class Duck : IFly, ISwim
{
    public void Fly()
    {
        Console.WriteLine("Flying");
    }

    public void Swim()
    {
        Console.WriteLine("Swimming");
    }
}

// Usage
IFly flyingBird = new Bird();
flyingBird.Fly();

ISwim swimmingDuck = new Duck();
swimmingDuck.Swim();

C#에서 데코레이터 패턴과 믹스인을 사용하여 객체의 기능을 동적으로 확장할 수 있습니다. 이를 통해 유연하고 확장 가능한 소프트웨어를 구현할 수 있습니다.

참고 자료