.NET 플랫폼, 따라서 Visual Basic에서 속성은 메타데이터로 코드의 다양한 요소를 주석 처리하기 위한 강력한 도구로 도입되었습니다. 이를 통해 실행 및 컴파일 단계에서 프로그램과 도구가 추가 정보를 얻고 메서드, 클래스, 속성의 동작을 조정할 수 있습니다. 이를 통해 리플렉션, 직렬화, 테스트 자동화 등의 메커니즘을 활용할 수 있습니다.
속성이 없으면 메서드나 클래스의 동작을 조정하기 위해 추가 로직을 하드 코딩해야 하며, 범용 라이브러리는 클래스나 메서드에 대한 외부 정보 없이 확장 가능하고 유연할 수 없습니다. 또한 코드 자체를 수정하지 않고 설정을 전송하는 데에도 문제가 발생합니다.
속성은 Attribute를 상속하는 특별한 클래스입니다. 이러한 속성은 메서드, 클래스, 속성, 매개변수 또는 반환 값에 적용할 수 있으며, 실행 단계에서 리플렉션을 통해 이러한 속성을 발견하고 해당 로직의 동작을 변경할 수 있습니다.
사용자 정의 속성을 생성하고 사용하는 코드 예:
Imports System <AttributeUsage(AttributeTargets.Class Or AttributeTargets.Method, AllowMultiple:=False)> Public Class InfoAttribute Inherits Attribute Public Property Description As String Public Sub New(desc As String) Description = desc End Sub End Class <Info("특별 비즈니스 로직 메서드입니다.")> Public Sub Calculate() Console.WriteLine("계산이 수행되었습니다.") End Sub ' 리플렉션을 통해 속성 읽기 Dim method = GetType(Module1).GetMethod("Calculate") Dim attr = CType(Attribute.GetCustomAttribute(method, GetType(InfoAttribute)), InfoAttribute) If attr IsNot Nothing Then Console.WriteLine(attr.Description)
주요 특징:
AttributeTargets.Class, Method, Property 등.속성이 리플렉션을 사용하지 않고 메서드나 클래스의 동작을 직접 변경할 수 있습니까?
아니요, 속성 자체는 메타데이터만 포함하고 있습니다. 객체의 동작을 변경하려면 호출 코드나 런타임이 리플렉션을 통해 속성의 존재를 확인하고 추가 작업을 수행해야 합니다.
동일한 속성을 동일한 요소에 여러 번 지정할 수 있으며, 이를 위해 무엇이 필요합니까?
기본적으로는 아니요. 속성을 선언할 때 AllowMultiple:=True를 AttributeUsage에 지정해야 여러 번 동일한 속성을 하나의 요소에 적용할 수 있습니다.
속성이 기본 클래스에서 파생 클래스로 상속됩니까?
아니요, 기본적으로는 상속되지 않습니다. 상속이 필요한 경우 AttributeUsage에 Inherited:=True를 지정해야 합니다.
프로젝트에서 메서드에 사용자 정의 속성을 대량으로 배치하지만, 아무도 리플렉션을 통해 이러한 속성을 처리하지 않습니다. 이런 코드는 쓸모없는 짐이 되어 유지 보수를 어렵게 하고 소스 코드를 읽기 힘들게 만듭니다.
장점:
단점:
속성이 로깅 메서드를 주석 처리하는 데 사용되며, 별도의 하위 시스템이 리플렉션을 통해 오디트할 메서드를 자동으로 결정하고.analytics를 삽입하고 추적을 추가합니다. 사용자의 관점에서 동작이 투명합니다.
장점:
단점: