C# 데이터 보관하기 (3)
Nullable 형식
int 형식의 변수 선언은 4바이트의 메모리가 할당된다.
이처럼 C# 컴파일러는 이 메모리 공간에 반드시 어떤 값이든 넣도록 강제한다.
하지만 프로그래밍을 하다 보면 어떤 값도 가지지 않는 변수가 필요할 때가 가끔 있다.
0이 아닌 비어 있는 변수, 즉 null 상태인 변수
nullable 형식을 사용할 수 있는 경우는 '값 형식'에 한해서이다. 참조형식은 사용 불가능!
Nullable 형식은 두 가지 속성
HasValue & Value
1) HasValue : 해당 변수가 값을 갖고 있는지 파악
2) Value : 변수에 담겨 있는 값을 나타냄
int? a = null;
Console.WriteLine(a.HasValue); // False
Console.WriteLine(a != null); // False
Console.WriteLine("");
a = 3;
Console.WriteLine(a.HasValue); // True
Console.WriteLine(a != null); // True
Console.WriteLine(a.Value); // 3
만약 Nullable 형식 변수에 Value 속성을 이용하여 값을 꺼내려 시도하면
CLR은 InvalidOperationException 예외를 띄울 것이다.
var : 데이터 형식을 알아서 파악하는 똑똑한 C# 컴파일러
int , string 같은 명시적 형식 대신 var를 사용해서 변수를 선언하면 컴파일러가 자동으로 해당 변수의 형식을 지정해 줌.
단, var 키워드를 이용해서 변수를 선언하려면 반드시 선언과 동시에 초기화가 필수 !
(C/C++과 달리 C#에서는 var는 지역 변수로만 사용 가능)
var a = 20;
Console.WriteLine("Type : {0}, Value : {1}", a.GetType(), a);
------------ 결과값 -------------
Type : System.Int32, Value : 20
object 형식과 혼돈하지 말자
object 형식은 object 형식일 뿐이다.
예를들어
object a = 20;
위 코드 중 object a =20;이 컴파일돼서 실행되면 CLR은 20을 박싱해서(int, 값 형식이기 때문에) 힙에 넣고 a 가 힙을 가리키도록 만들 것이다.
하지만 var a = 20;은 컴파일 시점에 컴파일러가 a에 적합한 데이터 형식을 파악해서 int a = 20;으로 바꿔 컴파일 할 것이다. CLR이 해당 코드를 실행할 때는 a가 var로 선언되었는지조차 눈치채지 못하고 int 형식의 객체 a에 20을 담아 스택에 올린다.
'ETC > C#' 카테고리의 다른 글
| 데이터를 가공하는 연산자 (0) | 2021.01.11 |
|---|---|
| C# 문자열 다루기 (0) | 2021.01.10 |
| C# 데이터 보관하기 (2) (0) | 2021.01.09 |
| C# 데이터 보관하기 (0) | 2021.01.08 |
| C# 프로그램 뜯어보기 (0) | 2021.01.07 |
댓글