dynamic 형식

blimeyoops·2023년 9월 26일
0

c#

목록 보기
5/6
post-custom-banner

dynamic 형식은 다른 타입처럼 하나의 타입이지만 컴파일시 형식 검사가 이뤄지는게 아니라 런타임시 형식 검사가 이루어진다. 즉, dynamic 형식은 컴파일 시점에 타입을 정하지 않고 런타임 시점에 타입이 결정된다.

덕 타이핑

공통된 속성이나 메서드가 있을때 인터페이스나 부모 클래스를 상속받아 상속관계를 이용해 호출한다.

internal class Program
{
    public static void Main(string[] args)
    {
        Call(new Meat());
        Call(new Vegetable());

        void Call(IFood food)
        {
            food.Make();
        }

        Console.ReadLine();
    }
}

interface IFood
{
    void Make();
}

public class Meat : IFood
{
    public void Make()
    {
        Console.WriteLine("Make meat");
    }
}

public class Vegetable : IFood
{
    public void Make()
    {
        Console.WriteLine("Make vegetable");
    }
}

타입이 똑같으면 위 구조로 호출이 가능하지만 타입이 다르면 위 구조로 호출이 안된다. 예를 들어, string의 IndexOf와 List\의 IndexOf는 기반이 되는 공통 타입이 없어 서로 상속 받아 만들어진 메서드가 아니다. 이럴 경우 dynamic를 활용하면 서로 다른 타입에서도 호출이 가능하다.

internal class Program
{
    public static void Main(string[] args)
    {
        string str = "abc";
        List<int> lists = new List<int>() { 1, 2, 3, 4 };

        Console.WriteLine(DynamicCall(str, "a"));
        Console.WriteLine(DynamicCall(lists, 2));

        Console.ReadLine();
    }

    public static int DynamicCall(dynamic target, dynamic item)
    {
        return target.IndexOf(item);
    }
}

일반적으로 객체 지향 언어는 강력한 형식을 가지고 있어 동일 타입을 기반으로 동작하지만 단지 이름의 속성이나 메서드가 공통으로 제공된다면 동일한 객체로 보고 형식 적용을 할 수 있고 이를 덕 타이핑 이라고 하고 이를 dynamic을 사용해 가능하게 해준다.

동적 언어 타입 연동

동적 언어(자바, 파이썬 등)와의 타입 연동에서도 dynamic 사용이 유용하다. 예를 들어 동적 언어의 메서드를 받아와 c# 코드에서 dynamic으로 받아와 c#에서 해당 언어의 메서드를 호출할 수 있다.

post-custom-banner

0개의 댓글