[c#] 데코레이터를 이용한 유효성 검사

C#에서 데코레이터를 사용하여 객체에 유효성 검사를 쉽게 추가할 수 있습니다. 데코레이터는 객체를 감싸고, 해당 객체의 동작을 변경하지 않으면서 새로운 기능을 추가합니다. 유효성 검사를 위해 데코레이터를 사용하면 중복된 코드를 제거하고 유지보수성을 높일 수 있습니다.

데코레이터 클래스 작성

using System;

public abstract class ValidatorDecorator : IValidator
{
    protected IValidator _validator;

    public ValidatorDecorator(IValidator validator)
    {
        _validator = validator;
    }

    public virtual ValidationResult Validate(object value)
    {
        return _validator.Validate(value);
    }
}

위 코드에서 ValidatorDecoratorIValidator를 구현하고, Validate 메서드를 오버라이드하여 유효성 검사 로직을 추가할 수 있습니다.

구체적인 데코레이터 클래스 작성

using System;

public class RequiredFieldValidator : ValidatorDecorator
{
    public RequiredFieldValidator(IValidator validator) : base(validator) { }

    public override ValidationResult Validate(object value)
    {
        if (value == null || string.IsNullOrWhiteSpace(value.ToString()))
        {
            return new ValidationResult(false, "This field is required.");
        }

        return _validator.Validate(value);
    }
}

위 코드에서 RequiredFieldValidatorValidatorDecorator를 상속받고, 유효성 검사를 수행하는 로직을 추가합니다.

데코레이터 활용

var validator = new RequiredFieldValidator(new EmailFormatValidator(new MaxLengthValidator(50)));
var result = validator.Validate(emailInput);

위 코드에서 RequiredFieldValidator, EmailFormatValidator, MaxLengthValidator와 같은 데코레이터들을 조합하여 유효성 검사 체인을 만들 수 있습니다.

이처럼 C# 데코레이터를 효과적으로 활용하여 유효성 검사를 확장하고 쉽게 추가할 수 있습니다.

참고 문헌