Dynamic type
Peponi │ 11/25/2024 │ 3m
C#
SyntaxTypedynamic
Dynamic type
11/25/2024
3m
Peponi
C#
SyntaxTypedynamic
1. Introduction
dynamic
(동적 형식) 은 해당 객체에 대한 형식 검사를 런타임에 진행하는 것을 나타내는 형식이다. ExpandoObject 클래스, DynamicObject 클래스와 같은 dynamic object를 사용 가능하게 해준다.
2. dynamic 형식의 특징
컴파일까지는 형식 검사를 하지 않기 때문에 코드상의 오류가 있더라도 확인되지 않는다.
int intA = 1;
string stringB = "A";
dynamic result = intA + stringB; // 컴파일은 가능하나 런타임 오류 발생
object
형식으로 컴파일되어 런타임에는 존재하지 않는 형식이며 형식 관련 코드 작업은 다음과 같이 간결하게 수행된다.
object providerObj = container.GetDataProvider();
Type hostType = providerObj.GetType();
object dataObj = hostType.InvokeMember(
"GetData",
BindingFlags.InvokeMethod,
null,
providerObj,
null
);
int data = Convert.ToInt32(dataObj);
dynamic host = container.GetDataProvider();
int data = host.GetData(); // 캐스팅 없이 바로 호출 가능
3. dynamic 형식의 장단점
dynamic
형식의 장점은 뚜렷하다.
- 최소한의 코드로 범용성, 다형성을 갖출 수 있다.
- 다른 동적 언어와 같이 사용 시 편의성이 좋다.
- 전통적인 형식에 비해 속도가 느리지만 (
int
,string
등), Reflection보다는 훨씬 빠르다.
하지만 만능은 아니다. 단점 또한 뚜렷하다.
인텔리센스
를 사용할 수 없으며 F12 (정의로 이동) 기능이 불가하다.- 컴파일 타임 오류 확인이 불가하기 때문에 런타임 오류가 증가할 수 있다.
4. dynamic 형식 사용 시나리오
많은 경우에서 dynamic
형식이 유용하게 쓰일 수 있다. 그 중 몇가지를 짚어본다.
- 다른 동적 언어와 같이 사용
Reflection
대체dynamic
사용으로 얻는 구현 상의 이득이 큼- 알지 못하는 형식의 데이터 처리