본문 바로가기
C#

[C#] 리플렉션 (Reflection)

728x90
반응형

리플렉션(Reflection)이란?

런타임 도중에 객체의 타입을 확인하거나 멤버 변수, 함수들의 정보를 확인할수 있게 해주는 기능입니다. 확인을 원하는 객체의 GetType()함수를 통해 객체 정보값을 불러오고 Type형식의 변수에 저장하여 확인이 가능합니다. 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;

namespace ConsoleApp1
{
    class Student
    {
        public string name;
        public int age;

        public Student(string _name, int _age)
        { 
            name = _name;
            age = _age;
        }

        public void Print()
        {
            Console.Write("name : {0}, age : {1}", name, age);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Student student = new Student("Tom", 22);
            Type type = student.GetType();

            ConstructorInfo[] coninfo = type.GetConstructors();
            Console.Write("ConstructorInfo : ");
            foreach (ConstructorInfo tmp in coninfo)
                Console.Write("{0}, ", tmp);
            Console.WriteLine();

            MemberInfo[] meminfo = type.GetMethods();
            Console.Write("MemberInfo : ");
            foreach (MethodInfo tmp in meminfo)
                Console.Write("{0}, ", tmp);
            Console.WriteLine();

            FieldInfo[] fieldinfo = type.GetFields();
            Console.Write("FieldInfo : ");
            foreach (FieldInfo tmp in fieldinfo)
                Console.Write("{0}, ", tmp);
            Console.WriteLine();
        }
    }
}

 

리플렉션은 어셈블리에서 정의하는 메타데이터에 접근할 때 문자열 검사를 하기 때문에 퍼포먼스 저하를 야기합니다. 때문에 가능하면 리플렉션을 피하는 방향으로 설계하는것이 좋습니다.

반응형