[c#] 데코레이터 패턴과 유닛 테스트

데코레이터 패턴은 객체의 기능을 동적으로 확장할 때 유용한 디자인 패턴 중 하나입니다. 이 패턴을 사용하면 기본 객체를 수정하지 않고도 새로운 기능을 추가할 수 있습니다. 또한, 이 패턴을 이용하면 객체 간에 쉽게 코드를 재사용할 수 있습니다.

데코레이터 패턴 개요

데코레이터 패턴은 기본 객체(컴포넌트)를 대상으로 새로운 데코레이터 객체를 추가함으로써 객체의 기능을 확장하는 방법입니다. 이 데코레이터 객체는 컴포넌트와 같은 인터페이스를 구현하며, 기본 객체를 감싸는 형태로 동작합니다. 이렇게 함으로써, 기본 객체의 동작에 새로운 기능을 동적으로 추가할 수 있습니다.

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

// 기본 구현 클래스
public class ConcreteComponent : IComponent
{
    public void Operation()
    {
        // 기본 기능 구현
    }
}

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

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

    public virtual void Operation()
    {
        // 새로운 기능 추가
        _component.Operation();
    }
}

데코레이터 패턴과 유닛 테스트

데코레이터 패턴을 사용할 때 유닛 테스트는 추가된 기능이 기본 기능을 올바르게 보존하고 있는지 확인하는 데 중요합니다. 유닛 테스트를 작성하여 각각의 데코레이터 클래스가 올바르게 동작하는지 확인할 수 있습니다.

[Test]
public void GivenConcreteComponentWhenOperationIsCalledThenNewFunctionalityIsAdded()
{
    // Arrange
    IComponent component = new ConcreteComponent();
    IComponent decoratedComponent = new ConcreteDecoratorA(new ConcreteDecoratorB(component));

    // Act
    decoratedComponent.Operation();

    // Assert
    // 새로운 기능이 올바르게 동작하는지 확인하는 코드 작성
}

결론

데코레이터 패턴은 객체의 기능을 동적으로 확장할 수 있는 강력한 패턴입니다. 데코레이터 패턴을 사용할 때는 기본 객체와 데코레이터 객체가 올바르게 상호작용하는지를 확인하기 위해 유닛 테스트를 작성하는 것이 좋습니다.

Refactoring Guru - Decorator Pattern Microsoft Docs - Decorator Pattern