본문 바로가기
ETC/C#

C# 데이터 보관하기 (3)

by 빡구동동 2021. 1. 10.

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

댓글