더북(TheBook)

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

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

매개변수가 있는 사용자 지정 특성 만들기: 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 속성으로 전달된 값을 가져다 사용할 수 있습니다.

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