[c#] 데코레이터를 이용한 데이터 변환 전략
데이터 변환은 소프트웨어 시스템에서 흔히 발생하는 작업 중 하나입니다. 데이터 변환 로직은 종종 변경되어야 하거나 유연하게 적용되어야 할 수도 있습니다. 이를 처리하기 위해 데코레이터 패턴을 사용하여 데이터 변환 전략을 동적으로 선택할 수 있습니다.
데코레이터 디자인 패턴
데코레이터 패턴은 객체에 추가적인 기능을 동적으로 부여하는 패턴입니다. 이 패턴을 이용하면 원본 객체의 기능을 유지한 채, 동적으로 추가적인 기능을 부여할 수 있습니다. 데이터 변환에서는 변환 전략을 동적으로 선택해야 하기 때문에 이 패턴이 적합합니다.
데이터 변환 전략
데이터 변환 전략은 데코레이터 인터페이스를 구현하는 클래스입니다. 각 변환 전략은 다양한 데이터 형식에 대한 변환을 처리합니다. 예를 들어, JSON 데이터를 XML로 변환하거나, CSV 데이터를 JSON으로 변환하는 전략이 있을 수 있습니다.
public interface IDataTransformer
{
string Transform(string data);
}
public class JsonTransformer : IDataTransformer
{
public string Transform(string data)
{
// JSON to XML transformation logic
}
}
public class CsvTransformer : IDataTransformer
{
public string Transform(string data)
{
// CSV to JSON transformation logic
}
}
데코레이터 구현
각 데이터 변환 전략을 구현한 후, 이를 데코레이터 클래스에 주입하여 추가적인 기능을 부여할 수 있습니다. 예를 들어, 변환된 데이터를 로깅하거나 에러 처리를 추가할 수 있습니다.
public abstract class DataTransformerDecorator : IDataTransformer
{
private readonly IDataTransformer _dataTransformer;
protected DataTransformerDecorator(IDataTransformer dataTransformer)
{
_dataTransformer = dataTransformer;
}
public virtual string Transform(string data)
{
return _dataTransformer.Transform(data);
}
}
public class LoggingDecorator : DataTransformerDecorator
{
public LoggingDecorator(IDataTransformer dataTransformer) : base(dataTransformer)
{
}
public override string Transform(string data)
{
// Logging logic
return base.Transform(data);
}
}
사용 예시
사용 예시를 보면, 변환 전략에 로깅 기능을 추가한 경우입니다.
IDataTransformer transformer = new JsonTransformer();
IDataTransformer loggingTransformer = new LoggingDecorator(transformer);
string originalData = "{...}";
string transformedData = loggingTransformer.Transform(originalData);
결론
데코레이터 패턴을 사용하여 데이터 변환 전략을 동적으로 선택하고 확장하는 방법을 살펴보았습니다. 이를 통해 데이터 변환 로직을 유연하게 구현하고 필요에 따라 변환 과정에 추가 기능을 동적으로 부여할 수 있게 되었습니다.
참고문헌:
- Freeman, E., Robson, E., & Bates, B. (2004). Head First Design Patterns. “O’Reilly Media, Inc.”