1. Reflection(리플렉션) [C#]

이경원·2025년 3월 17일

수업복습

목록 보기
1/1
post-thumbnail

리플렉션(reflection)이란?

  • 런타임에서 객체의 형식(type) 정보에 접근 할 수 있는 기능이다.
  • 리플렉션을 이용하면 프로그램 실행중에 객체의 타입, 프로퍼티 목록, 메소드 목록, 이벤트 목록, 필드등에 모두 접근이 가능하다.

Object 클래스와 GetType메소드

Object는 모든 데이터 형식의 조상이다. 그러므로 모든 데이터 형식은 Object형식이 가지고 있는 다음 메서드들을 모두 가지고 있다.

  • Eaquals()
  • GetHashCode()
  • GetType()
  • ReferenceEquals()
  • ToString()

위 5개의 메서드중 GetType() 메서드는 객체의 Type 정보를 반환하는 메서드이다.

Pokemon형식의 type을 가져오는 예제 코드이다.

static void Main(string[] args)
{
    Pokemon pokemon = new Pokemon();

    Type type = pokemon.GetType();

    Console.WriteLine(type);
}

결과


Type과 Reflection

Type은 타입, 어셈블리 이름, 프로퍼티, 메소드, 이벤트,필드등의 데이터 타입에 관한 모든 정보를 가지고 있다. 그렇기 때문에 Type을 이용한 리플렉션이 가능한 것이다.


인스턴스 field 가져오기

Type type = pokemon.GetType();

// public 인스턴스 필드 가져오기
FieldInfo[] fields1 = type.GetFields(BindingFlags.Public | BindingFlags.Instance);
// public이 아닌 인스턴스 필드 가져오기
FieldInfo[] fields2 = type.GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
// public 스태틱 필드 가져오기
FieldInfo[] fields3 = type.GetFields(BindingFlags.Public | BindingFlags.Static);
// public이 아닌 스태틱 필드 가져오기
FieldInfo[] fields4 = type.GetFields(BindingFlags.NonPublic | BindingFlags.Static);

GetField() 말고도 여러 가지 메서드를 사용 가능하다.



배우고 & 느낀점

당장 내일이 C# 리플렉션 쪽지 시험 대비로 블로그에 정리하며 공부하기 시작했다. 선배님들이 쓰시던 코드에서 쓰인 리플렉션을 무작정 따라만 하다 직접 개념과 활용법을 공부해서 알게 되는 유익한 시간이었다.

profile
게임 클라이언트 개발자 지망

0개의 댓글