reflection은 무엇인가?
객체의 Type(형식) 정보를 들여다보는 기능
void, int 같은 이러한 return 타입이 아니라 그 객체가 가지고 있는 모든 정보들(프로퍼티, 메소드, 변수, 반환타입 ..등)을 말한다.
이 기능을 이용하면 런타임 중에 객체의 프로퍼티 목록, 메소드 목록, 필드.. 등 모두 확인할 수 있다.
형식의 이름만 있다면 동적으로 인스턴스를 만들 수 있고, 그 인스턴스의 메소드를 호출할 수 있다.
마이크로소프트 개발진에서 모든 데이터 형식의 조상인 Object 형식에 모든 형식을 들여다볼 수 있도록 GetType() 메소드를 만들어 놓았다.
using System;
public class UI_Btn : MonoBehaviour
{
private void Start()
{
UI_Btn ui = new UI_Btn();
ReflectionTest.PrintMethods(ui.GetType());
}
public void BtnOnClicked()
{
}
}
public static void PrintMethods(Type type)
{
MethodInfo[] methods = type.GetMethods();
foreach (MethodInfo method in methods)
{
String accessLevel = "public";
if (method.IsPrivate) accessLevel = "private";
Debug.Log(accessLevel); // public
Debug.Log(method.ReturnType); // void
Debug.Log(method.Name); // BtnOnClicked
}
}
reflection 기능을 이용하면 해당 객체의 정보를 모두 가져올 수 있는데 여러가지 정보들 중에서 메소드 정보만 추출해서 가져옴
UI_Btn ui = new UI_Btn();
ReflectionTest.PrintMethods(ui.GetType());
ReflectionTest.PrintFields(typeof(UI_Btn)); // typeof는 식별자 자체를 인수로 받음
GetType()은 인스턴스가 있어야지 호출이 가능하지만, typeof()는 형식의 식별자 자체를 인수로 받기 때문에 인스턴스 없이 사용 가능함
'프로그래밍 언어' 카테고리의 다른 글
C# 프로퍼티 (0) | 2024.03.03 |
---|---|
C# 상수와 열거형 (0) | 2024.02.29 |
객체지향 프로그래밍(OOP) 개념정리 (0) | 2024.01.25 |
C# Delegate(대리자) (0) | 2023.11.10 |
연결 리스트(C++) (0) | 2023.08.29 |