F.R.I.D.A.Y.

C# - Nullable Type 본문

DEV/.Net

C# - Nullable Type

F.R.I.D.A.Y. 2021. 5. 27. 15:01
반응형

 null 값을 가질 수 있는 nullable 타입 자료형


자료형

 일반적으로 정수 자료형은 null이란 값을 가질 수 없다. null이란 값이 존재하지 않는다 라는 뜻으로, 흔히 C에서의 (void*)0 과는 다르다.[# C++을 제외한 것은 nullptr이라 불리는 새로운, null을 의미하는 리터럴이 추가되었기 때문이다.]

 

 C#에서 nullable 타입은 컴파일시 Nullable<T>로 변환된다.[# C++의 템플릿 클래스를 생각하면 쉽겠다.] 실제 사용은 자료형 뒤에 '?'를 붙여 사용한다.

int a = null; // 오류
int? b = null; // nullable 타입으로 선언했기 때문에 가능

 

null 체크

 변수가 null을 가졌는지 확인하기 위해서는 아래와 같은 방법을 이용할 수 있다.

int? a = null;

if(a.HasValue){}
if(a != null){}
if(a == null){}

 비교 연산자로도 처리할 수 있으며, HasValue라 불리는 프로퍼티로도 확인할 수 있다.

 

 또한 null은 null보다 크지도, 작지도 않다.

 

nullable 체크

 C#에는 is 연산자가 존재하고, 해당 연산자를 통해 자료형이 무엇인지 확인할 수는 있으나, T 자료형과 Nullable<T>는 구분이 불가능하다. 기본적으로 Nullable<T>는 T와 호환되기 때문이라고. 따라서 nullable인지 확인하려면 아래 함수를 이용해야한다.

IsOfNullableType(var);

 만일 nullable이라면 True를, 그렇지 않으면 False를 반환한다.

 

리프트 연산자

 이름은 거창한데, 그냥 nullable에 대응하는 단항 및 이항 연산자다. 단항 연산자의 경우 null값에선 더하거나 빼지지 않는고, 이항 연산자의 경우엔 어느 한 쪽이라도 값이 null인 경우 null로 반환된다.

int? a = null;
int? b = 10;

a++; // null
a + b // null

 

?? 연산자

 Null-coalescing operator라 불리는 연산자로, 선행하는 피 연산자의 값에 따라 해동 방식이 달라진다.

int? a = null;

if(a ?? 1){}

 위와 같은 코드에서 a가 null이기 때문에 ?? 연산자의 특성에 따라 뒤의 1이 반환된다. 즉 ?? 연산자는 앞선 피연산자의 값이 null인 경우 뒤쪽의 피 연산자 값을 반환하고, 앞쪽 피연산자의 값이 null이 아닌경우 앞쪽 피연산자의 값을 반환한다.

 

 이러한 특성으로 ?? 연산자의 앞쪽에는 nullable인 자료형일 때만 피연산자로 올 수 있다. 그렇지 않은 경우 오류가 발생한다.

 

# index

728x90
반응형

'DEV > .Net' 카테고리의 다른 글

C# - 반복문  (0) 2021.05.27
C# - 조건문  (0) 2021.05.27
C# - enum(열거형)  (0) 2021.05.27
C# - 문자열  (0) 2021.05.27
C# - 변수 선언  (0) 2021.05.27
Comments