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