C#/개념공부

C# Nullable 값 형식이란?

푸코잇 2024. 1. 7. 12:26

Nullable 값 형식이란?

C#에서 int, float와 같이 값 형식은 null을 가질 수 없다.

 

int? num = null;

 

하지만 Nullable을 사용하면 값 형식에도 null을 가질 수 있다.

자료형 뒤에 ?를 붙여주면 컴파일 시 Nullable<T> 구조체로 변환된다.

즉, int?는 Nullable<int>와 동일하다는 뜻이다.

Nullable 값 형식은 주로 DB에서 값을 읽어와 저장하는 데이터 구조에 자주 사용한다.

DB에는 null을 허용하는 bool, 날짜 등이 있으므로 C#에서 Nullable 값 형식으로 대체가능하다.

 

Nullable 사용방법

Nullable 구조체는 2개의 속성을 가지고 있다.

  • HasValue : 값을 가지고 있는지 체크하는 속성
  • Value : 실제 값을 나타내는 속성
static void Main(string[] args)
{
    int? num = 10;
    if(num.HasValue)
    {
        Console.WriteLine($"Value : {num.Value}");
        Console.WriteLine($"Type : {num.GetType()}");
        // Output :
        // Value : 10
        // Type: System.Int32
    }
}

 

null일때 메서드를 사용하면 NullReferenceException 예외가 발생하므로 HasValue를 통해 체크해야 한다.

체크해서 값을 가지고있다면 Value를 통해 값을 가져오거나 메서드를 사용하면 된다.

 

static void Main(string[] args)
{
    int? num = null;
    int? num2 = 100;
    Console.WriteLine($"num : {num.GetValueOrDefault()}");
    Console.WriteLine($"num2 : {num2.GetValueOrDefault()}");

}

 

GetValueOrDefault 메소드는 값이 있는 경우 할당된 값을 반환한다.

만약, null인 경우 기존 타입의 default 값을 반환한다.

 

 Nullable 값 형식에서 기본 형식으로 변환

static void Main(string[] args)
{
    int? num = null;
    int num2 = (int)num;    // null인 경우 InvalidOperationException 예외 발생
    Console.WriteLine(num2);
}

 

명시적 캐스트를 통해 변환을 할 수 있다.

하지만, null인 경우 InvalidOperationException 예외가 발생한다.

 

static void Main(string[] args)
{
    int? num = null;
    int num2 = num ?? 0;
    Console.WriteLine(num2);
    // Output:
    // 0
}

 

null인 경우도 처리하기 위해 null 병합 연산자 ??를 사용하여 변환할 수 있다.

만약 null인 경우 ?? 연산자 뒤에 있는 값으로 할당하게 된다.

'C# > 개념공부' 카테고리의 다른 글

C# var 키워드란?  (0) 2024.01.06
C# enum 열거형  (1) 2024.01.03
C# 상수(const)  (1) 2024.01.02
C# 변수  (0) 2023.12.21
C# 자료형 크기 및 범위  (0) 2023.12.19