본문 바로가기
Programming Language/C#

[C#] Nullable 형식

by dbxxrud 2019. 4. 28.

 

Nullable 형식 - Null (비어있는) + able (~ 될 수 있는), 즉 "비어 있는 상태가 될 수 있는" 형식이라는 뜻을 나타낸다.  우리가 프로그래밍을 하다 보면 어 떤 값도 가지지 않는 변수가 필요할 때가 있는데 0이 아닌 비어 있는 변수에게 할당된 메모리 공간을 비워 둘 수 있도록 Nullable형식을 사용하면 된다.

 

 

변수 선언 방법

 

데이터 형식? 변수 이름;

 

 

값 형식? 참조 형식?

 

Nullable 형식을 사용할 수 있는 경우는 값 형식에 한해서만 된다. 참조 형식은 사용불가!

 

int? a = null;

float? b = null;

double? c = null;

 

위에서 선언한 변수는 모두 null로 초기화됐는데, 뜻은 "해당 변수를 비운다"라는 뜻이다. 그렇다면 아무 값도 넣지 않으면 똑같지 않을까? 하지만 C# 컴파일러는 에러를 낼 것이다. 

 

int b; 는 아무런 문제가 없는 변수 선언이지만, int b = null;이라는 뜻을 갖는다고 하면 문제가 생긴다. int 형식은 비워 둘 수  없는 (null 값을 가질 수 없는) 데이터 형식이기 때문이다.

 

 

HasValue & Value

 

모든 Nullable 형식은 HasValue와 Value 두 가지 속성을 가지고 있다. HasValue 속성은 해당 변수가 값을 갖고 있는지 또는 그렇지 않은지를 나타내고 , Value 속성은 변수에 담겨 있는 값을 나타낸다. 

 

Nullable 형식 변수의 HasValue 속성이 False 값을 갖고 있다면 그 변수는 비어 있다는 뜻이다. Value 속성을 이용하여 값을 꺼내려 시도한다면 CLR은 invalidoperationexception 예외를 띄울 것이다. 따라서 Nullable 형식을 사용할 때는 HasValue 속성을 확인하거나 null과 같은지를 비교하여 변수가 비어있는지를 확인하는 사전 검사가 필요하다!

 

 

예제

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
using static System.Console;
namespace Practice2
{
    class MainApp
    {
        public static void Main()
        {
            int? a = null;
 
            WriteLine(a.HasValue);
            WriteLine(a != null);
 
            a = 3;
 
            WriteLine(a.HasValue);
            WriteLine(a != null);
            WriteLine(a.Value);
        }
    }
}
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none; color:white">cs

 

'Programming Language > C#' 카테고리의 다른 글

[C#] Null 병합 연산자 (Null-Coalescing Operator)  (0) 2019.04.28
[C#] 널 조건부 연산자 (Null-conditional operator)  (0) 2019.04.28
[C#] var  (0) 2019.04.28
[C#] 박싱과 언박싱  (0) 2019.04.28
[C#] object 형식  (0) 2019.04.28