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

C# 리플렉션(Reflection)의 주요 활용 사례와 예제


리플렉션(Reflection)은 프로그램이 실행되는 동안(런타임) 타입 정보를 얻기 위해 사용되는 강력한 기능입니다. 실행 중인 프로그램의 메타데이터에 접근할 수 있게 해주는 클래스들은 System.Reflection 네임스페이스에 포함되어 있습니다.

리플렉션의 주요 활용 분야

  • 특성(Attribute) 정보 조회: 런타임에 클래스나 멤버에 적용된 특성 정보를 확인할 수 있습니다.
  • 타입 검사 및 인스턴스화: 어셈블리 내부의 다양한 타입을 조사하고, 이를 동적으로 인스턴스화할 수 있습니다.
  • 지연 바인딩(Late Binding): 컴파일 시점이 아닌 런타임에 메서드와 속성을 바인딩하여 호출할 수 있습니다.
  • 동적 타입 생성: 런타임에 새로운 타입을 생성하고, 해당 타입을 사용해 다양한 작업을 수행할 수 있습니다.

System.Reflection 네임스페이스에는 애플리케이션에 대한 정보를 얻거나, 타입·값·객체를 애플리케이션에 동적으로 추가할 수 있도록 지원하는 클래스들이 포함되어 있습니다.

그럼 실제 예제를 통해 리플렉션이 어떻게 동작하는지 살펴보겠습니다.

먼저 대상 클래스의 MemberInfo 객체를 다음과 같이 설정합니다.

System.Reflection.MemberInfo info = typeof(MyClass);

아래는 전체 예제 코드입니다.

예제

using System;
using System.Reflection;

[AttributeUsage(AttributeTargets.All)]
public class HelpAttribute : System.Attribute {
    public readonly string Url;
    public string Topic {
        get {
            return topic;
        }

        set {
            topic = value;
        }
    }

    public HelpAttribute(string url) { // url은 위치 매개변수(positional parameter)입니다
        this.Url = url;
    }

private string topic;
}

[HelpAttribute("Information on the class MyClass")]
    class MyClass {
    }

namespace AttributeAppl {
    class Program {
        static void Main(string[] args) {
            System.Reflection.MemberInfo info = typeof(MyClass);
            object[] attributes = info.GetCustomAttributes(true);
            for (int i = 0; i < attributes.Length; i++) {
                System.Console.WriteLine(attributes[i]);
            }
            Console.ReadKey();
        }
    }
}

위 예제에서는 MyClass 클래스에 HelpAttribute라는 사용자 정의 특성을 적용한 후, 리플렉션을 통해 해당 특성을 런타임에 조회하고 출력합니다. GetCustomAttributes(true) 메서드는 클래스에 적용된 모든 특성을 배열 형태로 반환하며, 반복문을 통해 각 특성을 콘솔에 출력합니다.

실행 결과

HelpAttribute