[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
를 상속받아 추가적인 기능을 구현합니다.
데코레이터 패턴의 활용
데코레이터 패턴은 기존의 코드를 수정하지 않고도 객체의 기능을 동적으로 확장할 수 있는 유연한 방법을 제공합니다. 예를 들어, 객체에 여러 레벨의 기능을 추가해야 하는 경우, 데코레이터 패턴을 사용하여 간단하게 확장할 수 있습니다.
이와 같이 데코레이터 패턴을 통해 객체 지향 프로그래밍에서 유연하고 확장 가능한 구조를 만들 수 있습니다.
참고 자료
- Design Patterns: Elements of Reusable Object-Oriented Software, Erich Gamma 등 저, Addison-Wesley Professional 출판
- “Decorator Design Pattern in C#” - dotnetcultist.com