매개변수가 있는 사용자 지정 특성 만들기

    이번에는 매개변수를 하나 갖는 사용자 지정 특성을 사용해 보겠습니다. 다음 내용을 입력한 후 실행해 보세요.

    매개변수가 있는 사용자 지정 특성 만들기: NickNameAttributeTest.cs

    using System;
    
    //① AttributeUsage 특성을 사용하여 특성에 제약 조건 등 설정
    [AttributeUsage(
        AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = true)]
    public class NickNameAttribute : Attribute
    {
        public string Name { get; set; }
        public NickNameAttribute(string name) { Name = name; }
    }
    
    //② AllowMultiple로 여러 번 설정 가능
    [NickName("길벗")]
    [NickName("RedPlus")]
    class NickNameAttributeTest
    {
        static void Main() => ShowMetaData();
    
        static void ShowMetaData()
        {
            //모든 커스텀 어트리뷰트 가져오기
            Attribute[] attrs =
                Attribute.GetCustomAttributes(typeof(NickNameAttributeTest));
            foreach (var attr in attrs)
            {
                //ⓐ is 연산자를 사용하여 커스텀 어트리뷰트의 Name 속성 출력
                if (attr is NickNameAttribute)
                {
                    NickNameAttribute ais = (NickNameAttribute)attr;
                    Console.WriteLine("{0}", ais.Name);
                }
                //ⓑ as 연산자를 사용하여 커스텀 어트리뷰트의 Name 속성 출력
                NickNameAttribute aas = attr as NickNameAttribute;
                if (aas != null)
                {
                    Console.WriteLine("{0}", aas.Name);
                }
            }
        }
    }

    실행 결과

    길벗
    길벗
    RedPlus
    RedPlus

    사용자 지정 특성에 처럼 또 다른 특성인 AttributeUsage 특성을 사용하여 클래스 또는 메서드에 적용할 수 있음을 알려 줍니다. AllowMultiple 속성을 사용하여 한 번 이상 적용할 수 있는지 설정할 수 있습니다.

    처럼 NickName 특성의 생성자에 전달된 매개변수는 Name 속성에 저장해서 에서 Name 속성으로 전달된 값을 가져다 사용할 수 있습니다.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.