본문 바로가기

C#

C# AttributeTargets로 애트리뷰트 적용 범위 제어

C#에서 애트리뷰트(Attribute)는 코드에 메타데이터를 추가하는 강력한 방법입니다. 하지만 애트리뷰트를 잘못된 대상에 적용하면 의도치 않은 동작이 발생할 수 있어서, AttributeTargets를 사용해 적용 범위를 제한하는 것이 중요합니다.

1. AttributeTargets란?

AttributeTargets는 애트리뷰트를 어디에 사용할 수 있는지 지정하는 열거형(enum)입니다. 클래스, 메서드, 필드 등 다양한 코드 요소에 대해 사용할 수 있는 위치를 제한합니다.

2. 사용법

커스텀 애트리뷰트를 정의할 때, AttributeUsage 특성을 이용해 적용 대상과 기타 옵션을 설정합니다. 예를 들어, 클래스와 메서드에만 적용 가능하도록 제한하려면 다음과 같이 지정합니다.

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class MyCustomAttribute : Attribute
{
    // 구현 내용
}

3. 주요 AttributeTargets 값

  • AttributeTargets.Class : 클래스에 적용
  • AttributeTargets.Method : 메서드에 적용
  • AttributeTargets.Field : 필드에 적용
  • AttributeTargets.Property : 프로퍼티에 적용
  • AttributeTargets.Parameter : 메서드 매개변수에 적용
  • 여러 값을 파이프(|)로 조합 가능

4. 예제

아래 예제는 클래스와 메서드에만 적용 가능한 커스텀 애트리뷰트를 정의하고 사용하는 코드입니다.

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class InfoAttribute : Attribute
{
    public string Author { get; }

    public InfoAttribute(string author)
    {
        Author = author;
    }
}

[Info("홍길동")]
public class SampleClass
{
    [Info("이순신")]
    public void SampleMethod() { }

    // [Info("테스트")] // 오류: 프로퍼티에는 적용 불가
    // public int SampleProperty { get; set; }
}

이처럼 애트리뷰트 적용 범위를 명확히 지정하면, 코드를 보다 안전하고 명확하게 관리할 수 있습니다.