0Pricing
C# Academy · 강의

dynamic 형식

dynamic을 사용해 형식 확인을 실행 시점으로 미룹니다.

dynamic 형식은(는) CoddyKit의 무료 C# Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C# Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C# Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

dynamic이란 무엇인가요

dynamic 형식은 컴파일 시점의 형식 검사를 우회합니다. 멤버 접근과 연산은 대신 런타임에 결정됩니다.

using System;

class Program {
    static void Main() {
        dynamic value = 10;
        Console.WriteLine(value + 5);
    }
}

서로 다른 형식으로 다시 대입하기

dynamic 변수는 어떤 형식이든 저장할 수 있고, 대입할 때마다 형식이 바뀔 수도 있습니다.

using System;

class Program {
    static void Main() {
        dynamic x = 1;
        Console.WriteLine(x);
        x = "now a string";
        Console.WriteLine(x);
    }
}

런타임 바인딩

dynamic을 사용하면 컴파일러는 작성자를 신뢰합니다. 메서드와 속성의 조회는 컴파일할 때가 아니라 해당 줄이 실행될 때 이루어집니다.

using System;

class Program {
    static void Main() {
        dynamic text = "hello";
        Console.WriteLine(text.ToUpper());
    }
}

런타임에 오류가 나타납니다

검사가 지연되므로 잘못된 멤버를 사용하면 컴파일에 실패하는 대신 런타임에 RuntimeBinderException이 발생합니다.

using System;
using Microsoft.CSharp.RuntimeBinder;

class Program {
    static void Main() {
        dynamic n = 5;
        try {
            n.NoSuchMethod();
        } catch (RuntimeBinderException) {
            Console.WriteLine("No such member");
        }
    }
}

dynamic과 var

var는 컴파일 시점에 고정되고 dynamic은 런타임에 유연하게 동작합니다. 둘은 비슷해 보이지만 동작은 매우 다릅니다.

using System;

class Program {
    static void Main() {
        var fixedType = 10;
        dynamic flexible = 10;
        flexible = "changed";
        Console.WriteLine(fixedType + " " + flexible);
    }
}

dynamic에서의 산술 연산

dynamic에 사용하는 연산자는 관련된 실제 값에 따라 런타임에 결정됩니다.

using System;

class Program {
    static void Main() {
        dynamic a = 3;
        dynamic b = 4;
        Console.WriteLine(a * b);
    }
}

dynamic 반환값

형식이 실제로 달라질 수 있다면 메서드가 dynamic을 반환할 수 있지만, 호출자는 컴파일 시점의 도움을 받을 수 없게 됩니다.

using System;

class Program {
    static dynamic GetValue(bool flag) {
        return flag ? (dynamic)42 : "text";
    }
    static void Main() {
        Console.WriteLine(GetValue(true));
        Console.WriteLine(GetValue(false));
    }
}

dynamic의 사용 사례

dynamic은 COM 상호 운용, JSON과 유사한 데이터, 그리고 런타임이 되기 전까지 구조를 알 수 없는 코드를 호출할 때 도움이 됩니다.

using System;

class Program {
    static void Main() {
        dynamic data = 100;
        data += 1;
        Console.WriteLine(data);
    }
}

성능 비용

런타임 바인딩에는 추가 비용이 발생합니다. 반복이 많은 코드나 단순한 코드에서는 속도와 안전성을 위해 정적 형식을 우선 사용하십시오.

using System;

class Program {
    static void Main() {
        int fast = 0;
        for (int i = 0; i < 5; i++) fast += i;
        Console.WriteLine(fast);
    }
}

IntelliSense를 사용할 수 없습니다

형식을 런타임이 될 때까지 알 수 없으므로 편집기는 dynamic의 멤버를 제안할 수 없습니다. 이로 인해 개발 속도가 느려집니다.

using System;

class Program {
    static void Main() {
        dynamic s = "Code";
        Console.WriteLine(s.Length);
    }
}

신중하게 사용하십시오

정적 형식으로는 정말 표현할 수 없는 상황에서만 dynamic을 사용하고, 그 밖의 경우에는 구체적인 형식을 우선 사용하십시오.

using System;

class Program {
    static void Main() {
        dynamic flexible = 7;
        Console.WriteLine(flexible.GetType().Name);
    }
}

빠른 확인

dynamic에 대한 이해도를 확인해 보십시오.

복습

dynamic은 컴파일 시점의 형식 검사를 끄고 런타임에 멤버를 결정하므로 dynamic 변수는 형식을 바꿀 수 있고 잘못된 호출에서는 RuntimeBinderException이 발생합니다.

컴파일 시점에 고정되는 var와 달리 dynamic은 유연하지만 성능을 낮추고 IntelliSense를 사용할 수 없게 하므로 신중하게 사용해야 합니다.

자주 묻는 질문

“dynamic 형식” 강의는 무료인가요?

네 — “dynamic 형식” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C# Academy 강의 전체를 잠금 해제할 수 있습니다. C# Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“dynamic 형식”에서 뭘 배우나요?

dynamic을 사용해 형식 확인을 실행 시점으로 미룹니다. 브라우저에서 직접 실행하는 실습 코드로 C# Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

C# Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 C# Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“dynamic 형식” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 C# Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 C# Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. var를 사용한 지역 변수 형식 추론
  2. var를 피해야 할 때
  3. dynamic 형식
  4. 대상 형식이 지정된 new 식
← C# Academy(으)로 돌아가기