애트리뷰트(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 |