본문 바로가기
프로그래밍 언어

C# reflection

by do_ng 2024. 2. 28.

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