MSDN 내용입니다.


Attribute 개요

C++ 사용자라면 publicprivate와 같은 키워드를 포함하고 클래스 멤버에 대한 추가 정보를 제공하는 선언에 대해 잘 알고 있을 것입니다. 이러한 키워드를 사용하여 다른 클래스에 대한 액세스 여부를 지정함으로써 클래스 멤버의 동작을 상세하게 정의할 수 있습니다. 명시적으로 컴파일러는 미리 정의된 키워드를 인식하도록 디자인되어 있으므로 일반적으로 키워드를 직접 만들 수는 없습니다. 하지만 공용 언어 런타임에서는 특성이라는 키워드 방식의 설명적 선언을 추가하여 형식, 필드, 메서드, 속성 등의 프로그래밍 요소에 주석을 달 수 있습니다.


런타임을 목적으로 하는 코드를 컴파일하면 해당 코드는 MSIL(Microsoft intermediate language)로 변환되어 컴파일러에서 생성한 메타데이터와 함께 PE 파일 내에 놓입니다. 특성을 사용하면 메타데이터 내에 추가 설명 정보를 포함시킬 수 있으며 런타임 리플렉션 서비스를 사용하여 해당 메타데이터를 추출할 수 있습니다. 특성은 System.Attribute에서 파생된 특수 클래스의 인스턴스를 선언할 때 컴파일러에서 만들어집니다.

.NET Framework에서는 특성을 사용하여 여러 가지 상황에서 다양한 문제를 처리합니다. 특성은 데이터를 serialize하는 방법을 나타내고, 보안을 적용할 때 사용되는 특징을 지정하며, JIT(Just-in-Time) 컴파일러에 의한 최적화를 제한하여 코드가 쉽게 디버깅될 수 있도록 합니다. 또한 특성은 파일 이름 또는 코드 작성자를 기록하거나 폼을 개발하는 동안 컨트롤의 가시성 및 멤버를 제어하는 데도 사용할 수 있습니다.

특성을 사용하면 코드를 원하는 방법으로 간단하게 설명하고, 독창적인 새로운 방법으로 런타임 동작에 영향을 줄 수 있습니다. 또한 컴파일러를 다시 작성하지 않고도 C#, Managed Extensions for C++, Microsoft Visual Basic 2005 또는 런타임을 목적으로 하는 기타 언어에 사용자 고유의 설명적 요소를 추가할 수도 있습니다.


Attribute 적용

코드 요소에 특성을 적용하는 방법을 설명합니다.
  1. 새 특성을 정의하거나 .NET Framework에서 기존 특성의 네임스페이스를 가져옵니다.
  2. 설명할 요소 바로 앞에 있는 특성의 생성자를 원하는 플래그 또는 정보와 함께 호출하여 해당 특성을 초기화합니다.

    특성은 코드를 컴파일할 때 메타데이터로 내보내지며 공용 언어 런타임이나 기타 사용자 지정 도구 또는 응용 프로그램에서 런타임 리플렉션 서비스를 통해 사용할 수 있습니다.

    모든 특성 이름은 규칙에 따라 Attribute로 끝납니다. 하지만 Visual Basic 및 C# 같이 런타임을 목적으로 하는 일부 언어에서는 특성의 전체 이름을 지정할 필요가 없습니다. 예를들어, System.ObsoleteAttribute를 초기화 하려면 해당 특성을 Obsolete로 참조하면 됩니다.

    다음 코드 예제는 코드를 오래된 것으로 표시하는 System.ObsoleteAttribute의 선언 방법을 보여 줍니다. "Will be removed in next version" 문자열이 특성에 전달됩니다. 이 특성이 설명하는 코드가 호출되면 전달된 문자열을 표시하는 컴파일러 경고가 발생합니다.

 Imports System
'Call attributes between < and > in Visual Basic.
Public Module main
    Sub Main()
    'This generates a compile-time warning.
    Dim MyInt as Integer = Add(2,2)
    End Sub
    'Specify attributes between < and > brackets in Visual Basic.
    'This attribute is applied only to the Add method.
   
<Obsolete("Will be removed in next version ")> Function Add(a as Integer, b as Integer) as Integer
        Add = a + b
    End Function
End Module 



어셈블리 수준에 특성 적용

어셈블리 수준에 특성을 적용하려면 Assembly 키워드를 사용합니다. 다음 코드는 어셈블리 수준에 적용된 AssemblyNameAttribute를 보여 줍니다.


Imports System.Reflection
<Assembly:AssemblyName("MyAssembly")>

이 특성이 적용되면 문자열 "MyAssembly"가 해당 파일의 메타데이터 부분에 있는 어셈블리 매니페스트에 놓입니다. MSIL 디스어셈블러(Ildasm.exe)를 사용하거나 특성을 검색하는 사용자 지정 프로그램을 만들면 이 특성을 볼 수 있습니다.


반응형

+ Recent posts