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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.