Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 특성(Attribute) 완벽 가이드: 선언적 태그의 개념부터 커스텀 특성 만들기까지

C#에서 특성(Attribute)은 프로그램 내의 클래스, 메서드, 구조체, 열거형, 어셈블리 등 다양한 요소의 동작에 관한 정보를 런타임에 전달하기 위해 사용되는 선언적 태그(declarative tag)입니다. 특성을 활용하면 코드 자체를 수정하지 않고도 프로그램에 선언적인 메타데이터를 추가할 수 있습니다.

특성이란 무엇인가?

특성은 대상 요소 바로 위에 대괄호([ ])로 표시됩니다. 컴파일된 코드에는 이 메타데이터가 함께 저장되며, 리플렉션(Reflection)을 통해 런타임에 조회하거나 활용할 수 있습니다.

특성의 기본 문법

특성을 적용하는 기본 문법은 다음과 같습니다.

[attribute(positional_parameters, name_parameter = value, ...)]
Element
  • 위치 매개변수(positional_parameters): 특성 생성자의 필수 인자입니다.
  • 이름 매개변수(name_parameter = value): 선택적으로 지정하는 명명된 인자입니다.

.NET 프레임워크의 두 가지 특성 유형

.NET 프레임워크는 크게 두 종류의 특성을 제공합니다.

  1. 미리 정의된 특성(Pre-defined Attributes): 프레임워크에서 기본 제공하는 특성으로, 예를 들어 Obsolete, Serializable 등이 있습니다.
  2. 사용자 정의 특성(Custom Built Attributes): 개발자가 직접 정의하여 사용하는 특성입니다.

커스텀 특성 선언 방법

사용자 정의 특성은 System.Attribute 클래스를 상속받아 선언합니다. 아래는 클래스와 그 멤버에 적용할 수 있는 BugFix라는 이름의 커스텀 특성을 선언한 예제입니다.

//a custom attribute BugFix to be assigned to a class and its members
[AttributeUsage(
AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property,
AllowMultiple = true)]
public class DeBugInfo : System.Attribute

코드 설명

  • AttributeUsage: 해당 특성이 적용될 수 있는 대상을 지정합니다. 위 예제에서는 클래스, 생성자, 필드, 메서드, 속성에 적용할 수 있도록 설정했습니다.
  • AllowMultiple = true: 동일한 요소에 같은 특성을 여러 번 중복해서 적용할 수 있음을 의미합니다.
  • DeBugInfo : System.Attribute: System.Attribute를 상속함으로써 DeBugInfo가 유효한 특성 클래스가 됩니다.

이처럼 특성을 잘 활용하면 코드의 의도를 명확히 표현하고, 런타임에 동적으로 메타데이터를 읽어 유연한 프로그래밍이 가능해집니다.