더북(TheBook)

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# 기초 문법 파트에서는 이 강의에서 다룬 ObsoleteConditional 특성 정도만 다루면 충분합니다. 사용자 지정 특성은 자주 사용하지 않지만, 가장 간단한 모양으로 2개 정도 만들어 보았습니다. 특성 정보는 Type 개체를 사용하는 리플렉션으로 얻어 올 수 있습니다. 추후 사용자 지정 특성과 리플렉션 정보가 더 자세히 필요할 때는 마이크로소프트 Docs 온라인 설명서에서 검색해 보세요.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.