C#

C#) var & dynamic & object

그린티라떼 2022. 1. 13. 19:46

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는 힙에 메모리를 할당한 후 값을 저장시키고, 꺼내올 땐 힙에 있는 값을 빼와 스택에 저장시키는 참조타입이다.

(덕타이핑이라고도 한다.)

이러한 동적인 동작 때문에 느려질 수 있다.