리플렉션이란?


리플렉션 사용방법

  1. System.Reflection 네임스페이스를 정의 해준다.
  2. 가져올 대상의 형식 정보를 가져온다.
    1. System.Object의 GetType 메서드를 통해서 객체의 형식 정보를 확인하고, Type 객체를 반환한다. System.Object는 모든 자료형의 최상위 부모 클래스로서 Object의 메서드인 GetType은 어느 형식 정보든지 사용이 가능하다.
    2. 타입 연산자 typeof를 이용해서 객체의 형식 정보를 확인하고 System.Type 인스턴스를 반환한다. 타입 연산자는 GetType보다는 빠르게 코드를 생성한다.
  3. 가져온 형식 정보에서, 필요한 멤버를 가져온다.
  4. 리플렉션 사용
    1. Activator.CreatInstance로 형식 정보와 같은 유형의 인스턴스를 만들고 나서, 프로퍼티를 조작하거나, Invoke를 이용해서 메서드를 호출할 수 있다.
    2. GetField(), GetMethods()는 형식 타입을 검사한다. 결과 값으로는 public, 비 public, static, 인스턴스 항목을 조건으로 하여서 조회할 수 있다.
      1. 위의 검색 조건은 System.Reflection.BindingFlags 열거형으로 구성된다.
      2. BindingFlags는 리플렉션의 검색 범위 및 조건을 결정한다.
메서드 반환 형식 설명
GetConstructors() ConstruectorInfo[] 모든 생성자 목록 반환
GetEvents() EventInfo[] 이벤트 목록 반환
GetFields() FieldInfo[] 필드 목록 반환
GetGenericArguments() Type[] 형식 매개 변수 목록 반환
GetInterfaces() Type[] 상속하는 인터페이스 목록 반환
GetMemebers() MemberInfo[] 멤버 목록 반환
GetMethods() MemberInfo[] 메서드 목록 반환
GetNestedTypes() Type[] 내장 형식 목록 반환
GetProperties() PropertyInfo[] 프로퍼티 목록 반환
GetEnumValues()0 Array Enum의 배열 목록 반환

리플렉션의 단점


예시 코드