[c#] 데코레이터를 이용한 로깅 기능 추가

데코레이터는 객체의 동일한 인터페이스에 대해 다양한 기능을 동적으로 추가하는 디자인 패턴입니다. C#에서 데코레이터를 활용하여 로깅 기능을 추가하는 방법을 알아보겠습니다.

데코레이터 패턴 소개

데코레이터 패턴은 객체의 메서드 실행 전후에 필요한 작업을 추가하거나 수정함으로써 기능을 동적으로 확장할 수 있습니다. 이를 통해 기본 객체를 수정하지 않고도 유사한 객체에 대해 다양한 기능을 추가할 수 있습니다.

로깅 데코레이터 구현

아래는 C#에서 로깅 데코레이터를 구현하는 예제입니다.

// 인터페이스
public interface IService
{
    void PerformAction();
}

// 기본 구현
public class BasicService : IService
{
    public void PerformAction()
    {
        // 기본 기능 실행
    }
}

// 로깅 데코레이터
public class LoggingDecorator : IService
{
    private readonly IService _service;

    public LoggingDecorator(IService service)
    {
        _service = service;
    }

    public void PerformAction()
    {
        // 로깅 전 처리
        Console.WriteLine("Before action");
        
        // 기본 기능 실행
        _service.PerformAction();
        
        // 로깅 후 처리
        Console.WriteLine("After action");
    }
}

위 예제에서 LoggingDecoratorIService를 구현하고 있으며, 생성자를 통해 기본 서비스 객체를 받아들입니다. PerformAction 메서드 내에서 기본 기능을 실행하기 전과 후에 로깅을 추가하고 있습니다.

사용 예제

데코레이터를 이용하여 기본 서비스에 로깅 기능을 추가하는 방법은 다음과 같습니다.

var basicService = new BasicService();
var serviceWithLogging = new LoggingDecorator(basicService);

// 로깅이 추가된 서비스 사용
serviceWithLogging.PerformAction();

위 예제에서 BasicService를 생성한 후, 그것을 파라미터로 하는 LoggingDecorator를 생성함으로써 로깅이 추가된 서비스를 얻을 수 있습니다.

데코레이터 패턴을 통해 로깅 등의 기능을 동적으로 추가할 수 있으므로, 기본 객체의 변경 없이 여러 기능을 쉽게 적용할 수 있습니다.

위 예제는 C#에서 데코레이터를 이용한 로깅 기능 추가하는 방법을 설명한 것입니다.

참고 자료