var
C# 3부터 메서드 범위에서 선언된 변수에 암시적 “형식” var을 사용할 수 있다. 암시적 형식 지역 변수는 형식을 직접 선언한 것처럼 강력한 형식이지만 컴파일러가 형식을 결정한다. i의 다음 두 선언은 기능이 동일하다.
var i = 10; // Implicitly typed.
int i = 10; // Explicitly typed.
var사용에는 제약이 있다.
1. 예를 들어 string으로 선언된 var형 변수는 다른 타입으로 변경할 수 없다.
2. var타입으로 선언된 변수는 한 번 이상 무조건 값을 넣어야 한다.
dynamic
위의 var 타입에 대한 문제를 해결해주는 것이 dynamic 이다.
dynamic은 항상 런타임 시에 데이터 타입을 결정하게 된다.
dynamic i;
i = 101; //success
i = "string type!"; //success
dynamic 타입은 내부적으로 object 타입을 사용한다.
dynamic을 남용하다가는 문제가 생길 수 있는데 그 이유는 아래 object에서 설명해주겠다.
object
var의 형식은 직접 선언한 것처럼 강력한 형식이지만, object의 형식은 object이다.
꺼내 쓸 때마다 캐스팅을 해줘야 한다.
objcet obj1 = 3;
objcet obj2 = "string type";
int num = (int)obj1;
string str = (string)obj2;
변수를 선언할 때 전부 object, dynamic을 사용하면 편하지 않을까라는 생각을 할 수도 있도 있지만, 단점도 존재한다.
내부적으로 object는 힙에 메모리를 할당한 후 값을 저장시키고, 꺼내올 땐 힙에 있는 값을 빼와 스택에 저장시키는 참조타입이다.
(덕타이핑이라고도 한다.)
이러한 동적인 동작 때문에 느려질 수 있다.
'C#' 카테고리의 다른 글
C#) delegate 대리자 (0) | 2022.01.14 |
---|---|
C#) property (0) | 2022.01.13 |
C#) interface 인터페이스 (1) | 2022.01.13 |
C#) Generic 일반화 (0) | 2022.01.13 |