[c#] 데코레이터를 이용한 동적 로깅

데코레이터 패턴

데코레이터 패턴은 객체의 동작을 확장하거나 수정할 수 있도록 하는 구조적 디자인 패턴입니다. 데코레이터를 이용하면 객체에 대한 기본 동작을 변경하지 않으면서도 새로운 기능을 추가할 수 있습니다.

C#에서 데코레이터를 활용한 동적 로깅

다음은 C#에서 데코레이터를 이용한 동적 로깅의 간단한 예제 코드입니다.

// 로깅 기본 인터페이스
public interface ILogger
{
    void Log(string message);
}

// 기본 로깅 구현
public class ConsoleLogger : ILogger
{
    public void Log(string message)
    {
        Console.WriteLine(message);
    }
}

// 데코레이터 클래스
public abstract class LoggerDecorator : ILogger
{
    protected readonly ILogger _logger;

    public LoggerDecorator(ILogger logger)
    {
        _logger = logger;
    }

    public virtual void Log(string message)
    {
        _logger.Log(message);
    }
}

// 동적 로깅 데코레이터
public class DynamicLogger : LoggerDecorator
{
    public DynamicLogger(ILogger logger) : base(logger) { }

    public override void Log(string message)
    {
        var enrichedMessage = $"{DateTime.Now}: {message}";
        base.Log(enrichedMessage);
    }
}

이 예제 코드에서는 먼저 ILogger 인터페이스와 기본 로깅 구현인 ConsoleLogger를 정의합니다. 그런 다음 LoggerDecorator 추상 클래스를 만들어 데코레이터를 구현합니다. DynamicLogger 클래스는 LoggerDecorator를 상속하고 동적 로깅을 추가하는 기능을 구현합니다.

이제 이 동적 로깅 데코레이터를 사용하면 기본 로깅 동작에 동적으로 시간 정보를 추가할 수 있습니다. 이를 통해 실행 중에 발생하는 이벤트를 시간과 함께 기록할 수 있습니다.

이와 같이 C#에서 데코레이터 패턴을 활용하여 동적 로깅을 구현할 수 있습니다. 이를 통해 애플리케이션의 로깅 시스템을 유연하게 확장하고 추가 기능을 동적으로 적용할 수 있습니다.