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

C# 특성(Attribute) 완벽 이해하기: 선언 방법과 메서드 접근 예제

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

특성 설정 방법

특성을 설정하려면 아래와 같은 형식을 사용합니다.

[attribute(positional_parameters, name_parameter = value, ...)]
Element

대괄호 [ ] 안에는 특성의 이름과 값이 들어가며, 위치 매개변수(positional parameters)를 통해 필요한 정보를 지정할 수 있습니다. 필요에 따라 이름이 지정된 매개변수(name parameter)를 추가로 사용할 수도 있습니다.

예제 코드

다음은 C#에서 특성과 메서드에 접근하는 방법을 보여주는 예제입니다.

#define DEBUG
using System;
using System.Diagnostics;
public class Demo {
   [Conditional("DEBUG")]
   public static void Message(string str) {
      Console.WriteLine(str);
   }
}
class Test {
   static void functionDisplay() {
      Demo.Message("Our function...");
   }
   public static void Main() {
      Demo.Message("This is Main function!");
      functionDisplay();
      Console.ReadKey();
   }
}

코드 설명

위 예제에서 핵심은 [Conditional("DEBUG")] 특성입니다. 이 특성은 Demo 클래스의 Message 메서드에 적용되어, DEBUG 심볼이 정의된 경우에만 해당 메서드가 호출되도록 컴파일러에 지시합니다.

코드 최상단의 #define DEBUG 지시문으로 인해 DEBUG 조건부 컴파일 기호가 활성화되어 있으므로, Main 메서드와 functionDisplay 메서드에서 호출된 Message 메서드가 모두 정상적으로 실행됩니다. 만약 #define DEBUG를 제거하면 이 메서드 호출들은 컴파일 시 모두 제거됩니다.

실행 결과

프로그램을 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.

This is Main function!
Our function...

이처럼 Conditional 특성을 활용하면 디버깅용 로그 출력이나 테스트 코드 등을 릴리스 빌드에서 손쉽게 제외할 수 있어, 조건부 컴파일을 깔끔하게 처리하는 데 유용합니다.