C# var 키워드

var 키워드란?

var 키워드의 기능은 자료형을 자동으로 저장하는 것이다

var 키워드는 지역변수로 사용되어야 하며, 선언과 동시에 초기화 작업을 해야한다

var 100;
print("Type : "+ var.GetType()); // 결과 Type : int32

 

var은 컴파일러가 변수를 생성할 때, 값을 보고 타입을 추론해서 stack 영역에 지정하고 값을 삽입한다

ex) var = 5; 이면 5라는 값을 통해 Type이 int라고 추론함

따라서, int형일 경우 4byte를 stack에 할당받게된다

var a = 5; //4byte

var b = 6.6f;//8byte

따라서, int형인 a에 double형인 b의 값으로 덮어쓰려고 하면, a는 4byte의 영역을 할당받았기에 8byte의 영역을 필요로 하는 b의 값을 덮어씌우는 것이 불가능하다

var 키워드를 왜 사용하냐?

C#은 강력학 형식 검사를 하는 강력한 형식의 언어이다

하지만, 약한 형식 검사를 지원해주기도 하는데, 그때 var 키워드를 사용한다

 

▣강력한 형식 검사란?

- 프로그래머의 실수를 줄여주는 장점이 있다

- 의도치 않은 형식의 데이터를 읽거나 할당하는 일을 막아준다

 

약한 형식검사(var)란?

- 자동으로 해당 변수의 형식을 지정해줌

- int, float 등의 값 형식을 외울 필요가 없다

 

그렇다면 object와의 공통점과 차이점을 무엇일까?

공통점은 두 개다 명시적인 타입의 선언을 하지 않아도 변수를 선언하는 것이 가능하다

차이점은 어떤 방식으로 값을 저장하느냐에 있다

 

object란?

object 형식은 .Net Framework에서 제공하는 어떤 데이터든지 다룰 수 있는 데이터 형식이다

object 같은 경우 boxing(기존 타입을 감춤)과 unboxing을 통해 값을 저장한다

값을 boxing한 뒤 heap에 저장하고, stack에 해당 주소를 저장한 후 필요할 때마다 참조해서 쓰는 방식이다

타입이 변경된다 하더라도, 기존의 박싱된 상자를 지우고 새로 boxing하여 heap에 저장한 뒤 주소를 새로 바꾸기 때문에

기존의 값과 타입이 변경되어도, 의도한대로 값이 저장된다

 

Boxing이란?

value type의 값을 object type으로 변환하는 것을 말한다

int valuetype = 10;
object objecttype = valuetype;

print(objecttype); //결과 : 10

objecttype = "진우";

print(objecttype); //결과 : 진우

 

Unboxing이란?

Boxing의 반대로, obejcttpye 의 변수 값을 value type 값으로 변환하는 것을 말한다

//Boxing
int valuetype = 7;
object objecttype = valuetype;

//UnBoxing
int valuetype2 = (int)objecttype;

 

boxing에서 암시적 타입변환이 이루어지고, unboxing에서 명시적 타입변환이 이루어진다

 

값 형식이란?

변수가 값을 담아 내는 형식(stack)

 

참조 형식이란?

변수가 값 대신 값이 있는 곳의 위치를 담는 데이터 형식(C의 포인터개념)(heap)(C#에선 object)