일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Javascript
- c#
- 김성엽
- 티스토리
- 백준
- Desktop
- 프로그래밍
- Direct2D
- tipssoft
- 문법
- Win32
- 리뷰
- 포인터
- Tips강좌
- Programming
- 알고리즘
- c++
- 배열
- VS ERROR
- 함수
- Windows
- 지식나눔강좌
- Kotlin
- Tips프로그래밍강좌
- 연산자
- c
- doit코틀린프로그래밍
- CS
- 이지스퍼블리싱
- Visual Studio
- Yesterday
- Today
- Total
F.R.I.D.A.Y.
C# - Nullable Type 본문
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
'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 |