[c#] 데코레이터 클래스와 인터페이스

데코레이터 패턴은 객체 지향 프로그래밍에서 유용하게 활용되는 디자인 패턴 중 하나입니다. 데코레이터 패턴은 객체에 동적으로 새로운 책임을 추가할 수 있도록 해주는 구조적인 패턴으로, 기본적인 기능을 재사용하면서 객체에 새로운 기능을 동적으로 추가할 수 있습니다.

인터페이스와 데코레이터 클래스

데코레이터 패턴을 구현하려면 먼저 인터페이스데코레이터 클래스를 정의해야 합니다.

아래는 간단한 예제 코드로 C#에서 데코레이터 패턴을 구현하는 방법입니다.

// 인터페이스
public interface IComponent
{
    void Operation();
}

// 구체적인 컴포넌트
public class ConcreteComponent : IComponent
{
    public void Operation()
    {
        Console.WriteLine("기본 기능 수행");
    }
}

// 데코레이터 클래스
public class Decorator : IComponent
{
    private IComponent _component;

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

    public void Operation()
    {
        _component.Operation();
    }
}

// 구체적인 데코레이터
public class ConcreteDecorator : Decorator
{
    public ConcreteDecorator(IComponent component) : base(component)
    {
    }

    public override void Operation()
    {
        base.Operation();
        AddedBehavior();
    }

    private void AddedBehavior()
    {
        Console.WriteLine("추가적인 기능 수행");
    }
}

위 코드에서 IComponent는 기능을 정의하는 인터페이스로, ConcreteComponent는 기본적인 구현을 제공합니다. 또한, Decorator 클래스는 IComponent를 구현하고, 내부에 다른 IComponent 객체를 가지며, 추가적인 기능을 덧붙일 수 있도록 합니다. ConcreteDecorator 클래스는 Decorator를 상속받아 추가적인 기능을 구현합니다.

데코레이터 패턴의 활용

데코레이터 패턴은 기존의 코드를 수정하지 않고도 객체의 기능을 동적으로 확장할 수 있는 유연한 방법을 제공합니다. 예를 들어, 객체에 여러 레벨의 기능을 추가해야 하는 경우, 데코레이터 패턴을 사용하여 간단하게 확장할 수 있습니다.

이와 같이 데코레이터 패턴을 통해 객체 지향 프로그래밍에서 유연하고 확장 가능한 구조를 만들 수 있습니다.

참고 자료