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