C# 복습하기 16) 애트리뷰트(Attribute)

애트리뷰트(Attribute)

MSDN : 특성(C#)
https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/concepts/attributes/

 - 코드에 대한 부가정보를 기록하고 읽을 수 있는 기능.

 

애트리뷰트 vs 주석

 - 주석은 사람이 읽고 쓰는 정보

 - 애트리뷰트는 사람이 작성하고 컴퓨터가 읽는 정보

 

애트리뷰트 사용하기

 - 코드 앞에 [ ]괄호 쌍과 함께 애트리뷰트를 넣어준다.

[ 애트리뷰트(매개변수) ]
public void MyMethod()
{
    //..
}

  - .Net 프레임워크에서 제공하는 Obsolete 애트리뷰트는 유니티에서도 자주 사용됨.

  - Obsolete 애트리뷰트는 해당 코드를 사용할 경우 컴파일할때 경고를 띄우는 기능을 한다.

[Obsolete("OldMethod()는 폐기되었습니다. 가급적 NewMethod()를 사용하세요")]
public void OldMethod()
{

}

public void NewMethod()
{

}

 

호출자 정보 애트리뷰트

 - 메소드의 호출정보를 변수에 담는것도 가능하다.

애트리뷰트 설명
CallerMemberNameAttribute 현재 메소드를 호출한 메소드 또는 프로퍼티의 이름
CallerFilePathAttribute 현재 메소드가 호출된 소스 파일의 경로
CallerLineNumberAttribute 현재 메소드가 호출된 소스 파일 내 행(Line)번호
public static class Trace
{
    public static void WriteLine(string message,
        [CallerFilePath] string file = "",
        [CallerLineNumber] int line = 0,
        [CallerMemberName] string member = "")
    {
        Console.WriteLine($"{file} (Line:{line}) {member}: {message}");
    }
}

void SomeMethod()
{
    Trace.WriteLine("로그");
}

 

사용자 정의 애트리뷰트

 - 애트리뷰트 역시 클래스이기 때문에 System.Attribute를 상속받으면 사용자 정의를 만들 수 있다.

class MyAttribute : System.Attribute
{
    //...
}
[MyAttribute]
class MyClass
{
    //...
}

 

애트리뷰트 내용 추가하기

 - 필드 및 프로퍼티로 내용을 추가할 수 있다.

class MyAttribute : System.Attribute
{
    public string Programmer{get;set;}
    public double Version{get;set;}
    public string Changes{get;set;}

    public MyAttribute(string programmer)
    {
        Programmer = programmer;
        Version = 1.0;
        Changes = "First release"
    }
}
[MyAttribute("이름", Version = 0.1, Changes = "2020-01-01 null 오류 수정")]
class MyClass
{
    //....
}

 

Attribute 중첩하기

 - 기본적으로 Attribute는 한 번 밖에 사용하지 못한다.

 - System.Attribute.Usage의 AllowMultiple 속성이 true여야 중첩가능.

[System.AttributeUsage(System.AttributeTargets.Class, AllowMultiple=true)]
class MyAttribute : System.Attribute
{
    //...
}

 - 첫번째 매개변수는 애트리뷰티의 대상이며, 논리합을 통해 복수를 대상으로 할 수도있다.

 - 대상이 될 수 있는 요소들은 All, Assembly, Module, Interface, Class, Struct, ClassMembers, Constructor, Delegate, Enum, Event, Field, Property, Method, Parameter, ReturnValue 등이 있다.

[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple=true)]
class MyAttribute : System.Attribute
{
    //...
}

 - AllowMultiple 속성이 true라면 다음과 같이 중첩해서 적용이 가능하다.

[Author("P. Ackerman", version = 1.1)]  
[Author("R. Koch", version = 1.2)]  
class SampleClass  
{  
    // P. Ackerman's code goes here...  
    // R. Koch's code goes here...  
}  

 

 

'C# Study > C# 기초' 카테고리의 다른 글

C# Enumerable.SequenceEqual 배열 같음 / 배열 같음  (0) 2023.04.25
C# 복습하기 17) dynamic 형식  (0) 2021.04.15
C# 복습하기 15) 리플렉션  (0) 2021.04.14
C# 복습하기 14) LINQ  (0) 2021.04.13
C# 복습하기 13) 람다식  (0) 2021.04.13

댓글

Designed by JB FACTORY