[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