다음을 통해 공유


리플렉션

System.Reflection 네임스페이스의 클래스와 System.Type을 사용하면 로드된 어셈블리와 이 어셈블리에 정의된 클래스, 인터페이스, 값 형식 등의 형식에 대한 정보를 얻을 수 있습니다. 리플렉션을 사용하여 런타임에 형식 인스턴스를 만든 다음, 이 형식 인스턴스를 호출하고 액세스할 수도 있습니다. 리플렉션의 구체적인 특징에 대해 설명하는 항목을 보려면 이 개요의 끝 부분에 있는 관련 항목을 참조하십시오.

공용 언어 런타임 로더는 응용 프로그램 범위가 같은 개체 주위에 정의된 경계를 구성하는 응용 프로그램 도메인을 관리합니다. 이 관리 작업에는 각 어셈블리를 적절한 응용 프로그램 도메인에 로드하고 각 어셈블리에 있는 형식 계층 구조의 메모리 레이아웃을 제어하는 일이 포함됩니다.

어셈블리에는 모듈이 있고, 모듈에는 형식이 있으며, 형식에는 멤버가 있습니다. 리플렉션을 통해 어셈블리, 모듈 및 형식을 캡슐화하는 개체를 제공할 수 있습니다. 리플렉션을 사용하여 형식의 인스턴스를 동적으로 만들거나, 형식을 기존 개체에 바인딩하거나, 기존 개체에서 형식을 가져올 수 있습니다. 그리고 나서 형식의 메서드를 호출하거나 형식의 필드 및 속성에 액세스할 수 있습니다. 리플렉션의 일반적인 용도는 다음과 같습니다.

  • Assembly를 사용하여 어셈블리를 정의 및 로드하고, 어셈블리 매니페스트에 나열된 모듈을 로드하며, 이 어셈블리에서 형식을 찾아 형식의 인스턴스를 만듭니다.

  • Module을 사용하여 모듈이 포함된 어셈블리와 모듈에 있는 클래스 등의 정보를 검색합니다. 모든 전역 메서드를 가져오거나 모듈에 정의된 다른 특정 비전역 메서드를 가져올 수도 있습니다.

  • ConstructorInfo를 사용하여 생성자의 이름, 매개 변수, 액세스 한정자(예: public 또는 private) 및 구현 정보(abstract 또는 virtual)를 검색합니다. TypeGetConstructors 또는 GetConstructor 메서드를 사용하여 특정 생성자를 호출합니다.

  • MethodInfo를 사용하여 메서드의 이름, 반환 형식, 매개 변수, 액세스 한정자(예: public 또는 private) 및 구현 정보(abstract 또는 virtual)를 검색합니다. TypeGetMethods 또는 GetMethod 메서드를 사용하여 특정 메서드를 호출합니다.

  • FieldInfo를 사용하여 필드의 이름, 액세스 한정자(예: public 또는 private) 및 구현 정보(예: static)를 검색하고, 필드 값을 가져오거나 설정합니다.

  • EventInfo를 사용하여 이벤트의 이름, 이벤트 처리기 데이터 형식, 사용자 지정 특성, 선언 형식, 리플렉션된 형식 같은 정보를 검색하고, 이벤트 처리기를 추가하거나 제거합니다.

  • PropertyInfo를 사용하여 속성의 이름, 데이터 형식, 선언 형식, 리플렉션된 형식, 읽기 전용/쓰기 가능 상태 같은 정보를 검색하고, 속성 값을 가져오거나 설정합니다.

  • ParameterInfo를 사용하여 매개 변수의 이름, 데이터 형식, 입력 매개 변수인지 출력 매개 변수인지 여부, 메서드 시그니처의 매개 변수 위치 같은 정보를 검색합니다.

  • CustomAttributeData를 사용하여 응용 프로그램 도메인의 리플렉션 전용 컨텍스트에서 작업할 때 사용자 정의 특성에 대한 정보를 검색합니다. CustomAttributeData를 사용하면 인스턴스를 작성하지 않아도 특성을 검토할 수 있습니다.

System.Reflection.Emit 네임스페이스의 클래스에서는 런타임에 형식을 만들 수 있도록 하는 리플렉션의 특수 형식을 제공합니다.

리플렉션은 형식 브라우저라고 하는 응용 프로그램을 만드는 데도 사용될 수 있습니다. 형식 브라우저를 사용하면 형식을 선택하고 선택된 형식에 대한 정보를 볼 수 있습니다.

리플렉션에는 다른 용도도 있습니다. JScript 같은 언어의 컴파일러에서는 기호 테이블을 만드는 데 리플렉션이 사용됩니다. System.Runtime.Serialization 네임스페이스의 클래스에서는 리플렉션을 사용하여 데이터에 액세스하고 유지할 필드를 결정합니다. System.Runtime.Remoting 네임스페이스의 클래스에서는 serialization을 통해 간접적으로 리플렉션을 사용합니다.

관련 항목

제목

설명

리플렉션의 런타임 형식

RuntimeType과 같이 System.Reflection 네임스페이스의 추상 클래스를 상속하고 해당 구현을 많이 제공하는 내부 형식에 대해 설명합니다.

형식 정보 보기

Type 클래스에 대해 설명하고, Type과 여러 리플렉션 클래스를 사용하여 생성자, 메서드, 필드, 속성 및 이벤트에 대한 정보를 얻는 방법을 보여 주는 코드 예제를 제공합니다.

리플렉션 및 제네릭 형식

리플렉션이 형식 매개 변수와 제네릭 형식 및 제네릭 메서드의 형식 인수를 처리하는 방법에 대해 설명합니다.

Reflection 클래스에서 사용되는 디자인 패턴

메서드 명명 패턴을 비롯하여 Module, Type, MemberInfo 클래스 같이 가장 자주 사용되는 reflection 클래스의 용도를 표 형식으로 보여 줍니다.

리플렉션의 보안 고려 사항

형식 정보와 액세스 형식을 검색하는 데 사용될 수 있는 리플렉션 정도를 결정하는 규칙에 대해 설명합니다.

동적으로 형식 로드 및 사용

런타임에 바인딩을 지원하는 리플렉션 사용자 지정 바인딩 인터페이스에 대해 설명합니다.

방법: 리플렉션 전용 컨텍스트에 어셈블리 로드

리플렉션 전용 로드 컨텍스트에 대해 설명합니다. 어셈블리를 로드하는 방법, 컨텍스트를 테스트하는 방법 및 리플렉션 전용 컨텍스트의 어셈블리에 적용된 특성을 검사하는 방법을 보여 줍니다.

기본 멤버 액세스

리플렉션을 사용하여 클래스가 가질 수 있는 기본 멤버에 액세스하는 방법에 대해 설명합니다.

기본 인수 값 액세스

리플렉션을 사용하여 기본값이 있는 인수에 액세스하는 방법과 이 인수를 사용하는 메서드를 호출하는 방법에 대해 설명합니다.

사용자 지정 특성 액세스

리플렉션을 사용하여 특성 유무와 값을 쿼리하는 방법에 대해 설명합니다.

정규화된 형식 이름 지정

BNF(Backus-Naur Form)를 기초로 하는 정규화된 형식 이름의 형식과 특수 문자, 어셈블리 이름, 포인터, 참조 및 배열을 지정하는 데 필요한 구문에 대해 설명합니다.

관리되지 않는 리플렉션 API

메타데이터 검사를 위한 관리되지 않는 리플렉션 사용에 대한 정보를 찾을 수 있는 곳에 대해 설명합니다.

방법: 리플렉션을 사용하여 대리자 후크

메서드의 대리자를 만들고 이벤트에 후크하는 방법에 대해 설명합니다. 런타임에 DynamicMethod를 사용하여 이벤트 처리 메서드를 만드는 방법에 대해 설명합니다.

동적 메서드 및 어셈블리 생성

동적 어셈블리와 동적 메서드를 생성하는 방법에 대해 설명합니다.

참조

System.Type

System.Reflection

System.Reflection.Emit

맨 위로 이동