46.12 Type과 Activator 클래스로 개체의 인스턴스를 동적 생성하기
Type.GetType() 메서드로 특정 클래스의 Type 개체를 가져올 수 있고, 이를 다시 Activator 클래스의 CreateInstance() 메서드에 전달하여 동적으로 문자열로 지정된 클래스의 인스턴스를 생성할 수 있습니다. 동적 인스턴스를 생성하는 다음 예제를 작성한 후 실행해 보세요.
동적 인스턴스 생성: TypeAndActivator.cs
using System; namespace TypeAndActivator { //① 샘플 클래스 및 메서드 생성 public class MyClass { public void Test() => Console.WriteLine("MyClass의 Test() 메서드가 실행됩니다."); } class TypeAndActivator { static void Main() { //② Type.GetType() 메서드에 지정한 클래스 형식을 가져옴 Type type = Type.GetType("TypeAndActivator.MyClass"); //③ Activator.CreateInstance() 메서드로 지정된 형식의 인스턴스 생성 dynamic objType = Activator.CreateInstance(type); //④ dynamic 타입의 Test() 메서드를 직접 지정해서 호출 objType.Test(); } } }
실행 결과
MyClass의 Test() 메서드가 실행됩니다.
프로그래밍을 하다 보면 동적으로 특정 클래스의 인스턴스를 생성해야 할 일이 있습니다. 이때는 앞 예제처럼 Type.GetType()과 Activator.CreateInstance() 메서드를 함께 사용합니다. 물론 학습을 시작하는 독자들이 보는 이 책의 범위를 벗어나는 내용이므로 ‘이러한 것이 있구나’ 정도만 알고 넘어갑니다.
C#을 사용하는 ASP.NET, Entity Framework 등에서는 내장된 특성이 굉장히 많습니다. C# 기초 문법 파트에서는 이 강의에서 다룬 Obsolete와 Conditional 특성 정도만 다루면 충분합니다. 사용자 지정 특성은 자주 사용하지 않지만, 가장 간단한 모양으로 2개 정도 만들어 보았습니다. 특성 정보는 Type 개체를 사용하는 리플렉션으로 얻어 올 수 있습니다. 추후 사용자 지정 특성과 리플렉션 정보가 더 자세히 필요할 때는 마이크로소프트 Docs 온라인 설명서에서 검색해 보세요.