이렇게 부가 정보를 작성하는데 주석을 사용할 수도 있습니다.
그러나 주석은 전적으로 사람이 읽도록 만들어진 것이라면 애트리뷰트는 컴퓨터를 위한 것입니다.
예를 들어 다음 버전에 deprecated 처리 될 메소드의 앞에 덧붙여서 컴파일시 경고를 줄 수도 있고, 메소드나 속성에 대해 설명을 추가해 줄 수도 있습니다.
사용법
[ 애트리뷰트명(매개변수)]
와 같이 간단하게 사용됩니다. 어셈블리, 클래스, 모듈, 구조체, 열거형 변수, 생성자, 메소드, 프로퍼티, 필드, 이벤트, 인터페이스, 파라미터, 반환값, 델리게이트의 앞에 모두 사용 가능합니다.
간단한 예제로 사용법을 알아보겠습니다.
using System;
namespace AttributeExample
{
class MyClass
{
[Obsolete("2017년부터 OldMethod는 사용 중지됩니다. NewMethod를 이용하세요. ")]
public void OldMethod()
{
Console.WriteLine("구버전");
}
}
class Program
{
static void Main(string[] args)
{
MyClass mine = new MyClass();
mine.OldMethod();
}
}
}
| cs |
결과)
구버전
그러나 오류 목록을 보면 이런 경고가 뜹니다.
호출자 정보 애트리뷰트
C/C++에서 제공하던 __FILENAME__, __LINE__, __FUCTION__ 매크로에 해당하는 기능입니다. 이것을 이용해서 로그를 찍어보면 해당 이벤트가 어떤 경로, 어떤 행에서 일어났는지를 알 수 있습니다.
System.Runtime.CompilerServices 네임스페이스에 정의된 이 애트리뷰트는
CallerMemberNameAttribute
CallerFilePathAttribute
CallerLineNumberAttribute 의 세가지입니다.
예제로 사용 방법을 알아 보겠습니다.
using System;
using System.Runtime.CompilerServices;
namespace CallerInfo
{
public static class TraceMessage
{
public static void WriteLine(string message,
[CallerFilePath] string file="",
[CallerLineNumber] int line=0,
[CallerMemberName] string member = "")
{
Console.WriteLine("{0}(Line:{1}) {2} {3}", file, line, member, message);
}
}
class Program
{
static void Main(string[] args)
{
TraceMessage.WriteLine("Something happened!");
}
}
}
| cs |
결과)
C:\Users\user\Documents\Visual Studio 2015\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs(Line:20) Main Something happened!
Attribute의 아주 간단한 것들만 살펴 봤지만, 이쯤에서 모두들 예상하듯이 그 종류는 또 어마어마합니다. 필요한 것은 그때그때 살펴보는 것이 정신 건강에 이로울 듯 합니다.
댓글 없음:
댓글 쓰기