< dynamic 이란? >

dynamic은 데이터 형식 중 하나로서, 보통 변수를 선언할 때, .int,string,double과 같은 데이터 Type을 지정하는데,

dynamic을 사용하면 컴파일 시점이 아닌, 실행 시점에 변수의 데이터 형식이 결정된다.

int나 string과 같은 형식은 상자의 크기가 정해진 상자라면, dynamic은  크기가 변하는 상자와 같다. 필요에 따라 원하는 물건을 담을 수 있다. 

< dynamic을 이용해서 변수 사용하기 >

using System;

namespace Dynamic
{
    class Program
    {
        static void Main(string[] args)
        {
            dynamic Box = "초코비";
            Console.WriteLine($"Box 안에는 {Box}가 있어요 dynamic 타입은 실행 시점에서 결정되니까 string 이겠죠. 답 : {Box.GetType()}");

            Box = 2000;
            Console.WriteLine($"Box 안에는 {Box}원이 있어요. dynamic 타입은 int 타입 이겠죠.{Box.GetType()}");

            Box = new System.Collections.Generic.List<string> {"초코비","액션가면"};
            Console.WriteLine($"Box 안에는 {string.Join(" ", Box)} of type {Box.GetType()}");
        }
    }
}

< COM 객체 >

dynamic은 COM 객체를 다룰 때 특히 유용하다. 예를 들어, Excel을 제어하는 경우에 사용할 수 있다.

우선 Visual Studio에서 "도구" > "NuGet 패키지 관리자" > "패키지 관리자 콘솔"을 선택해서.
콘솔에 다음 명령어를 입력하여 Excel 라이브러리를 설치해도 된다.

Install-Package Microsoft.Office.Interop.Excel

 

혹은, 아래와 같이 참조를 오른쪽 클릭 후, COM 탭에서 Microsofte Excel 16.0 Object Libaray를 찾은 후 확인을 눌러도 된다.

이제 아래와 같이 코드를 작성하고, 실행을 하면,

using System;
using Excel = Microsoft.Office.Interop.Excel;

namespace MagicalComInteraction
{
    class Program
    {
        static void Main(string[] args)
        {
            dynamic excelApp = new Excel.Application();
            excelApp.Workbooks.Add();
            excelApp.Visible = true;

            dynamic worksheet = excelApp.ActiveSheet;
            worksheet.Cells[1, 1].Value = "반갑습니다";
            worksheet.Cells[1, 2].Value = "저는";
            worksheet.Cells[1, 3].Value = "윤태영";
            worksheet.Cells[1, 4].Value = "입니다.";
            worksheet.Cells[1, 5].Value = "나이는";
            worksheet.Cells[1, 6].Value = "90살";
            worksheet.Cells[1, 7].Value = "최고에요!";
        }
    }
}

Excel 창이 열리면서 설정한 값이 셀 텍스트에 보이게 된다.

< Python과 상호 운용성 >

C# 코드 안에서 Python 코드를 호출하는 데에도 dynamic이 유용하다. 이를 위해 Pythonnet라는 라이브러리를 사용할 수 있다. 우선 Pythonnet 라이브러리를 추가하거나.

dotnet add package Python.Runtime

혹시나 실행 시 안된다면, NuGet 패키지관리에서 pythonnet을 설치하면 해결 된다.

using System;
using Python.Runtime;

namespace PythonBridge
{
    class Program
    {
        static void Main(string[] args)
        {
            using (Py.GIL())
            {
                dynamic np = Py.Import("numpy");
                dynamic array = np.array(new double[] { 1.2, 3.4, 5.6 });
                Console.WriteLine($"Sum of array: {np.sum(array)}");
            }
        }
    }
}

위 코드는 Python의 numpy 라이브러리를 불러와서 배열의 합을 계산한다.

'C#' 카테고리의 다른 글

전기제어 PLC(Programmable Logic Controller)  (0) 2023.06.19
C# 파일과 디렉터리  (0) 2023.06.19
일반화와 제네릭  (0) 2023.06.17
대리자와 이벤트  (0) 2023.06.17
리플렉션,애트리뷰트  (0) 2023.06.17

+ Recent posts