C#에는 컴파일러와 개발자에게 추가 정보를 제공하는 미리 정의된 특성(Predefined Attributes)이 마련되어 있습니다. 대표적인 세 가지 특성은 다음과 같습니다.
- AttributeUsage – 사용자 지정 특성 클래스의 사용 방식을 정의
- Conditional – 조건부 메서드를 선언하여 조건부 컴파일 수행
- Obsolete – 더 이상 사용하지 말아야 할 프로그램 요소를 표시
1. AttributeUsage
AttributeUsage는 사용자 지정 특성(custom attribute) 클래스가 어떻게 사용될 수 있는지를 설명하는 미리 정의된 특성입니다. 이 특성을 통해 해당 특성이 적용될 수 있는 프로그램 요소(클래스, 메서드, 필드 등)와 상속 및 중복 적용 여부를 제어할 수 있습니다.
기본 문법은 다음과 같습니다.
[AttributeUsage (
validon,
AllowMultiple = allowmultiple,
Inherited = inherited
)]- validon: 특성이 적용될 수 있는 언어 요소를 지정합니다(예:
AttributeTargets.Class,AttributeTargets.Method). - AllowMultiple: 하나의 요소에 동일한 특성을 여러 번 적용할 수 있는지 여부를 결정합니다.
- Inherited: 파생 클래스가 기본 클래스의 특성을 상속받는지 여부를 지정합니다.
2. Conditional
Conditional 특성은 지정된 전처리 식별자(preprocessing identifier)에 따라 실행 여부가 결정되는 조건부 메서드(conditional method)를 표시합니다. 예를 들어 Debug나 Trace 같은 값을 기준으로 메서드 호출의 조건부 컴파일을 수행할 수 있어, 디버깅용 로그 코드를 릴리스 빌드에서 손쉽게 제외할 때 유용합니다.
기본 문법은 다음과 같습니다.
[Conditional(
conditionalSymbol
)]지정한 기호(예: DEBUG)가 정의되어 있으면 메서드 호출이 포함되고, 그렇지 않으면 컴파일러가 해당 호출을 무시합니다.
3. Obsolete
Obsolete 특성은 더 이상 사용해서는 안 되는 프로그램 요소를 표시합니다. 이 특성을 사용하면 컴파일러에게 특정 대상 요소를 폐기(deprecated)하도록 알릴 수 있으며, 해당 요소가 사용될 때 경고 또는 오류 메시지가 발생합니다.
기본 문법은 다음과 같습니다.
[Obsolete (
message
)]
[Obsolete (
message,
iserror
)]- message: 요소가 더 이상 권장되지 않는 이유나 대체 방법을 설명하는 문자열입니다.
- iserror:
true로 설정하면 경고가 아닌 컴파일 오류로 처리되어, 해당 요소의 사용을 강제적으로 차단할 수 있습니다.
정리
C#의 미리 정의된 특성은 코드의 의도를 명확히 하고, 조건부 컴파일을 간편하게 처리하며, 레거시 코드의 사용을 통제하는 강력한 도구입니다. AttributeUsage로 사용자 지정 특성의 범위를 관리하고, Conditional로 디버그 코드를 제어하며, Obsolete로 구형 API의 사용을 안내하는 방식으로 활용해 보시기 바랍니다.