리플렉션을 배우기 앞서 간단하게 프로세스 구조를 먼저 설명하겠다.
- AppDomain : 프로세스 내부에 독립적인 실행환경을 제공해서 서로 충돌하지 않도록 보호한다.
- 모듈 : 어셈블리 내의 코드 및 데이터 단위, 하나의 모듈을 하나의 EXE 또는 DLL 파일을 나타낸다.
- 모듈은 파일이라고 생각하면 편하다. [ 파일 단위 ]
GetAssemblies()
를 호출하면 해당 AppDomain이 가지고 있는 어셈블리들을 전부 다 가져올 수 있다. 검색할 때 검색 조건, 검색 동작을 제외하는 플래그.
Flags
1. Public :
public
으로 선언된 맴버들을 검색
2. NonPublic :private
,protected
등 비공개 맴버 검색
3. Instance : 인스턴스 맴버 공개
4. Static : 정적(static) 맴버 검색
5. DeclaredOnly : 상속받은 맴버 제외, 해당 클래스에서
6. IgnoreCase : 맴버 이름 대소문자 구분없이 검색
리플렉션(Reflection)은 코드에서 타입의 정보를 동적으로 조회하고 조작할 수 있는 기능이다.
이 기능들을 사용하여 런타임에 클래스, 메소드, 속성 등과 같은 메타데이터를 확인하고, 객체를 생성하거나 메서드를 호출하는 등의 작업을 수행할 수 있다.
Type
클래스를 사용하여 타입의 메서드, 속성, 필드 등을 조회할 수 있다.리플렉션은 C#에서 매우 좋은 도구이지만, 사용 시 성능과 유지 보수성을 고려해야 하기에 필요한 경우에만 사용하는 것을 추천한다.
1. GetConstructors()
- 설명 : 생성자 목록 반환
- 반환 타입 : Constructioninfo[]
2. GetEvents()
- 설명 : 이벤트 목록 반환
- 반환 타입 : EventInfo[]
3. GetFields()
- 설명 : 필드 목록 반환
- 반환 타입 : FieldInfo[]
4. GetGenericArguments()
- 설명 : 형식 매개변수 목록 반환
- 반환 타입 : Type[]
5. GetInterfaces()
- 설명 : 인터페이스 목록 반환
- 반환 타입 : Type[]
6. GetMembers()
- 설명 : 맴버 목록 반환
- 반환 타입 : MemberInfo[]
7. GetMethods()
- 설명 : 메소드 목록 반환
- 반환 타입 : MethodInfo[]
8. GetNestedTypes()
- 설명 : 내장 형식(중첩 클래스) 목록 반환
- 반환 타입 : Type[]
9. GetProperties()
- 설명 : 프로퍼티 목록 반환
- 반환 타입 : PropertyInfo[]
그 외의 메서드
GetType() : 런타임에 인스턴스 자료형(타입)을 가져올 때 사용
Type.GetType() : 런타임에 문자열로 타입 정보를 가지고 온다
어셈블리 전체를 대상으로 찾음, 문자열에 전체 네임스페이스 포함