관리 메뉴

도드넷

C# 데이터 타입, 변수 타입 - Part 5 본문

창고/C# [구-폐쇄]

C# 데이터 타입, 변수 타입 - Part 5

도드! 2015. 4. 2. 11:04
반응형





C# 데이터 타입, 변수 타입


C# 에서는, 변수는 다음과같은 타입들로 나누어져있습니다.


1. Value 타입

2. Reference 타입

3. Pointer 타입


Value 타입 변수는 직접적으로 Value(값)를 할당할 수 있습니다. 이들은 class System.ValueType 에서 파생(derived)됬습니다.  벨류 타입은 직접적으로 데이터를 포함하고 있습니다. 예를들면 int, char, float  같이 숫자, 문자, 부동소수점 수를 보관합니다. 당신이 int 타입을 선언했을때, system은  메모리에 해당 벨류에대한 공간을 할당할것입니다. 


다음은 C# 2010 에서 사용가능한 Value 타입입니다.




타입의 정확한 크기를 알아내려면 sizeof 메소드를 사용하면 됩니다. 

sizeof(type) 메소드는 해당 타입이나 오브젝트에 할당된 저장공간을 바이트로 산출합니다. 


다음 int 타입의 크기를 구하는 예제입니다.




위의 코드가 컴파일되고 실행되면 아래와 같은 결과가 나옵니다.


Size of int: 4



reference(레퍼런스) 타입은 실제 데이터를 저장하진 않습니다. 

하지만 그들은 어떤변수에 대한 Reference(참조사항) 을 가지고 있습니다!



* 도드의 노트 

The reference types do not contain the actual data stored in a variable, but they contain a reference to the variables. "레퍼런트 타입에 저장되는건 실제데이터가 아니라 참조자료라고 한다." 근데 뭔 개소리인지 해서 

실험해봤는데 값을 더하지도 빼지도 비교하지도 못하는걸로 봐서 실제로 레퍼런스 타입에 입력된 DATA(값)들은 

"실존"하지 않고 그냥 보관/참고(refering) 용도인듯하다. 



다른말로하면, 메모리 위치(Memory Location)를 참조한다는 것입니다. 다중 변수를 사용할때, 레퍼런스 타입은 

특정 메모리 위치를 참조할 수 있습니다. 만약, 해당 메모리 위치의 데이터가 변경되면 다른 변수들 또한 자동으로 

값의 변화가 반영될 것입니다. 빌트인 레퍼런스 타입은 다음과 같습니다 : object, dynamic, string


object 타입은 Common Type System (CTS)에서 모든 데이터 타입을 위한 기본 클래스 끝판왕 타입입니다.  

오브젝트란 System.Object class의 다른 이름입니다. 오브젝트 타입은 Value 타입, Reference 타입, 미리정해진 타입또는 사용자정의 타입 같은 다른 어떤타입의 값도 할당받을 수 있습니다. 그러나, 값을 할당하기전에 타입 변환이 필요 합니다.


어떤 벨류타입이 오브젝트타입으로 변환될때 이것을 boxing 이라고 합니다. 반대로 오브젝트타입이 벨류타입이 될때는

unboxing 이라고 합니다.


박싱(boxing) 예시


dynamic 타입은 어떤 타입의 벨류든 저장할 수 있습니다. 타입 검사는 런타임중에 일어납니다. 

dynamic 타입 변수를 선언하는 문법은 다음과 같습니다.


dynamic 변수이름 = 값;

예 : dynamic DOD = 5;


object 타입 과 dynamic 타입은 매우 유사한데 한가지 차이가 있습니다. object 타입의 타입체킹은 컴파일중에 

일어나고 dynamic 타입의 타입체킹은 런타임중에 일어난다는 겁니다. 


string 타입은 어떤 문자열(문장) 값을 할당하게 해줍니다. string 타입은 System.String class의 다른 이름입니다.

이것은 object 타입에서 파생되었습니다. string type을 위한 값은 다음과 같은 문자열 형식을 쓰면 됩니다. 


string Name  = "Dod Mason";


사용자 정의 reference 타입들은 다음과 같은것들이 있습니다. : class, interface, delegate. 

이는 나중 챕터에서 자세히 알아보도록 하겠습니다.


pointer 타입은 다른 타입변수의 메모리의 주소를 저장합니다. C#에서 pointer는 C와 C++과 동일합니다. 

pointer 타입을 선언하는 문법은 다음과 같습니다.


타입* 이름;

예 : char* DOD;




* 도드의 C# 튜토리얼 번역 파트5 - C# 데이터 타입, 변수 타입 (C# Data Types)

- Translated by Dod Mason








반응형
Comments