반응형
특성(애트리뷰트)이란?
C# 애트리뷰트는 컴파일 시간에 타입, 멤버(클래스, 메서드, 속성, 필드, 이벤트 등) 또는 다른 프로그램 요소에 대해 추가 정보를 제공하기 위해 사용되는 선언적인 태그 또는 주석을 의미한다.
애트리뷰트를 사용하면 코드에 메타데이터를 추가하거나 다양한 요소에 정보나 동작 부여가 가능하다.
주요 사용 목적은 다음과 같다.
메타데이터 제공 | 애트리뷰트를 사용하여 코드 요소에 메타데이터나 설명적인 정보를 추가 가능. 예를 들어, Obsolete 애트리뷰트는 메서드나 클래스를 더 이상 권장하지 않는 것으로 표시하여 사용을 비추천함을 나타냄 |
동작 제어 | 애트리뷰트는 코드의 동작에 영향을 끼침. 예를 들어, DllImport 애트리뷰트는 네이티브(Non-.NET) 라이브러리에서 가져와 호출할 메서드를 지정하는 데 사용. |
코드 생성 지원 | 애트리뷰트는 코드 생성을 트리거하거나 코드 생성기나 다른 도구에 지시를 제공. 예를 들어, .NET 데이터 컨트랙트 직렬화와 함께 DataContract 및 DataMember 애트리뷰트는 직렬화 프로세스를 제어하는 데 사용. |
프레임워크 및 도구 지원 | 애트리뷰트는 프레임워크와 도구에서 확장성과 사용자 정의 가능한 옵션을 제공하는 데 널리 사용. |
어떻게 사용할 수 있을까?
애트리뷰트는 [애트리뷰트 이름] 형식으로 표현을 해야 한다.
"애트리뷰트 이름"은 적용하려는 특정 애트리뷰트를 나타낸다.
애트리뷰트는 타입, 타입 멤버 또는 다른 애트리뷰트 앞에 위치시킬 수 있다.
예를 들어, Obsolete Attribute는 다음과 같이 사용할 수 있다.
[Obsolete]
public class MyClass
{
}
.Net에서 제공하는 애트리뷰트는 다음과 같은 것들이 있다.
Obsolete | 메서드, 클래스 또는 속성을 사용하지 않도록 표시. 이 애트리뷰트는 해당 요소가 더 이상 사용되지 않거나 대체되었음을 나타낸다. |
Serializable | 클래스나 구조체가 직렬화될 수 있음을 나타낸다. 직렬화는 객체를 이진 형식이나 XML 형식으로 변환하여 저장하거나 네트워크 상에서 전송할 수 있게 한다. |
AttributeUsage | 사용자 정의 애트리뷰트의 사용 방법을 제어. 이 애트리뷰트를 사용하여 애트리뷰트를 적용할 수 있는 요소의 유형, 다중 적용 여부 등을 정의할 수 있다. |
Conditional | 메서드 호출을 컴파일 시간에 조건적으로 제어. 이 애트리뷰트를 사용하여 메서드 호출이 특정 조건이 충족될 때만 수행되도록 할 수 있다. |
DllImport | 네이티브 라이브러리에서 가져올 외부 함수를 지정. 이 애트리뷰트는 C# 코드에서 네이티브 코드와 상호 작용할 때 사용된다. |
Conditional("DEBUG") | 디버그 또는 추적 조건부 컴파일을 지원. 이 애트리뷰트를 사용하여 특정 조건이 충족될 때만 코드의 일부를 컴파일하도록 할 수 있다. |
DataContract, DataMember |
데이터 컨트랙트 직렬화를 지원. 이 애트리뷰트들은 데이터를 직렬화하고 역직렬화할 때 필요한 메타데이터를 제공다. |
NotNull, CanBeNull | 코드 요소(매개변수, 반환값 등)가 null이 아니어야 한다는 것을 나타낸다. 이 애트리뷰트들은 코드 분석 도구나 정적 분석 도구와 함께 사용될 때 유용하다. |
Conditional("DEBUG") | 디버그 빌드에서만 특정 코드 블록이 실행되도록 지정한다. 이 애트리뷰트는 효율적인 디버깅과 배포 버전의 코드 최적화를 도와준다. |
반응형
'C# 프로그래밍 > 문법 개념' 카테고리의 다른 글
[C#] 제네릭 및 형식 제약 조건 (Generic & new, where) (0) | 2022.06.08 |
---|---|
[C#] 메서드 매개 변수 (params, in, out , ref) (0) | 2022.06.07 |
[C#] 사용자 정의 전환 연산자 (Conversion operator) (0) | 2022.06.02 |
[C#] 널 허용 값 형식 (Nullable) (0) | 2022.05.30 |
[C#] 오브젝트 (Object) (0) | 2022.05.27 |