Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 사용자 지정 특성(Custom Attribute) 구성 방법 총정리

C# 특성(Attribute)이란 무엇인가?

특성(Attribute)은 프로그램에 메타데이터를 추가하기 위해 사용됩니다. 여기에는 컴파일러 지시문뿐만 아니라 주석, 설명, 메서드, 클래스와 같은 다양한 정보가 포함될 수 있습니다.

.NET Framework는 선언적 정보를 저장하고 런타임 시 이를 검색할 수 있는 사용자 지정 특성(Custom Attribute)의 생성을 지원합니다. 새로운 사용자 지정 특성을 만들려면 System.Attribute 클래스를 상속받아야 합니다.

AttributeUsage로 적용 대상 지정하기

사용자 지정 특성을 정의할 때는 AttributeUsage 특성을 함께 사용하여 해당 특성이 어느 프로그램 요소(클래스, 생성자, 필드, 메서드, 프로퍼티 등)에 적용될 수 있는지 명시해야 합니다. 아래 예제는 클래스와 그 멤버에 할당할 수 있는 BugFix 특성을 정의한 것입니다.

// 클래스와 그 멤버에 할당되는 사용자 지정 특성 BugFix
[AttributeUsage(
AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property,
AllowMultiple = true)]

public class DeBugInfo : System.Attribute

DeBugInfo 사용자 지정 특성 만들기

이제 디버깅 과정에서 얻은 정보를 저장하는 DeBugInfo라는 이름의 사용자 지정 특성을 만들어 보겠습니다.

DeBugInfo 클래스는 처음 세 가지 정보를 저장하기 위한 세 개의 private 필드와, 메시지를 저장하기 위한 public 프로퍼티를 가집니다. 따라서 버그 번호(bug number), 개발자 이름(developer's name), 검토 날짜(date of review)는 DeBugInfo 클래스의 위치 매개변수(positional parameter)가 되고, 메시지(message)는 선택적(named) 매개변수가 됩니다.

전체 코드 예제

// 클래스와 그 멤버에 할당되는 사용자 지정 특성 BugFix
[AttributeUsage(
AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property,
AllowMultiple = true)]

public class DeBugInfo : System.Attribute {
    private int bugNo;
    private string developer;
    private string lastReview;
    public string message;

    public DeBugInfo(int bg, string dev, string d) {
        this.bugNo = bg;
        this.developer = dev;
        this.lastReview = d;
    }

    public int BugNo {
        get {
            return bugNo;
        }
    }

    public string Developer {
        get {
            return developer;
        }
    }

    public string LastReview {
        get {
            return lastReview;
        }
    }

    public string Message {
        get {
            return message;
        }

        set {
            message = value;
        }
    }
}

핵심 포인트 정리

  • 사용자 지정 특성은 반드시 System.Attribute 클래스에서 파생되어야 합니다.
  • AttributeUsage를 통해 특성이 적용될 수 있는 대상(Class, Method, Property 등)을 제한할 수 있습니다.
  • AllowMultiple = true로 설정하면 동일한 요소에 같은 특성을 여러 번 적용할 수 있습니다.
  • 생성자의 필수 인자는 위치 매개변수로, 나머지는 명명된(선택적) 매개변수로 동작합니다.