티스토리 뷰

주석의 코드화

코딩을 하다보면, 단순히 코드 말고 주석 등과 같은 정보를 추가하고 싶을 때가 있다. 

그런데 이러한 정보를 주석과 달리 컴퓨터도 읽을 수 있게 하고 싶다고 하면 어떨까?

그 중 한가지가 바로 Attribute 이다. 

 

Attribute에 대한 내용은 우리의 친구 MSDN에 잘 설명 되어 있다. 

https://docs.microsoft.com/en-us/dotnet/csharp/tutorials/attributes

 

Tutorial: Use attributes - C#

Learn how attributes work in C#.

docs.microsoft.com

 

Obsolete

아마 나를 포함하여 많은 사람들이 맨 처음 Attribute를 접한 경로이지 않을까 싶다. 가장 대표적인 Attribute로 

일반적인 레거시 모듈에서 지금은 더이상 사용하지 않거나, 추후 삭제 예정인 클래스에 이 특성을 표시한다. 그러면 아래 예제와 같이 이를 빌드하는 모든 개발자가 볼 수 있도록 Terminal에 로그를 남겨 준다.  

    [Obsolete("Refrigerator  is obsolete. Use Fridge instead.")]
    public class Refrigerator
    {
        public string Model { get; set; } = string.Empty;
    }

    public class Fridge
    {
        public string Model { get; set; } = string.Empty;
    }

    class Program
    {
        static void Main(string[] args)
        {
            var fridge = new Refrigerator() { Model = "금성냉장고" };
            Console.WriteLine($"{fridge.Model}");

            var fridge2 = new Fridge() { Model = "LG냉장고" };
            Console.WriteLine($"{fridge2.Model}");
        }
    }

Obsolete 특성이 있는 클래스 사용시 나타나는 문구

 

사용자 지정 Attribute

사용자 지정 Attribute를 사용하기 위해서는 아래와 같이 Attribute를 상속받아 만들 수 있다. 

[System.AttributeUsage(System.AttributeTargets.Class|System.AttributeTargets.Struct)]  
public class AuthorAttribute : System.Attribute  
{  
    private string name;  
    public double version;  
  
    public AuthorAttribute(string name)  
    {  
        this.name = name;  
        version = 1.0;  
    }  
}

 

예시

아래는 Attribute를 사용할 수 있는 대상이다. 

  • Assembly
  • Event
  • Module
  • Class
  • Field
  • Parameter
  • Constructor
  • GenericParameter
  • Property
  • Delegate
  • Interface
  • ReturnValue
  • Enum
  • Method
  • Struct

 

사실은 Obsolete 말고도 Serializable 같은 유용한 기존의 Attribute들이 있다. 

시간 날때 마다 찾아보고 다채롭게 코딩하면 좋을 거 같다.