본문 바로가기
C#/이론

[예제로 배우는 C# 프로그래밍] Nullable 타입

by 단월໒꒱ 2022. 7. 6.

 

C# Nullable 타입

 

 

Nullable Type

 

  C#에서는 Value Type에도 null을 할당할 수 있는 Nullable 타입을 지원한다. Nullable 타입은 Value 값을 갖고 있으면서 Null 상태를 체크할 수 있는 기능을 갖고 있는 struct이다. 따라서 Nullable 타입은 구조체이므로 Value 타입이다.

 

  int?와 같이 해당 Value Type 뒤에 물음표를 붙이면 해당 정수형 타입이 Nullable 정수형 타입임을 의미한다. 즉, 이 변수에는 Null을 할당할 수 있다. 이러한 특별한 문법은 .NET의 Nullable<T> 구조체로 컴파일시 변환된다. 즉, int?는 Nullable<int>와 동일한 역할을 한다.

 

 

int? i = null;
bool? b = null;
int?[] a = new int?[100];

 

 

 

Nullable<T> 타입

 

  C#에서 int?, bool?, DateTime?와 같은 T? 표현은 .NET의 Nullable<T>와 같은 표현이며, 이 구조체는 값을 가지고 있는지를 체크하는 HasValue 속성과 실제값을 나타내는 Value 속성을 가지고 있다.

 

 

double _Sum = 0;
DateTime _Time;
bool? _Selected;

public void CheckInput(int? i, double? d, DateTime? time, bool? selected)
{
    if (i.HasValue && d.HasValue)
        this._Sum = (double)i.Value + (double)d.Value;

    // time값이 있는 체크.
    if (!time.HasValue)
        throw new ArgumentException();
    else
        this._Time = time.Value;

    // 만약 selected가 NULL이면 false를 할당
    this._Selected = selected ?? false;
}

 

 

 

Nullable 정적 클래스

 

  .NET Framework에 있는 정적 클래스 System.Nullable은 두개의 Nullable 객체를 비교하거나 특정 Nullable 타입의 어떤 Value 타입에 기반을 두고 있는지 알아내는 기능을 제공하고 있다.

 

 

void NullableTest()
{
    int? a = null;
    int? b = 0;            
    int result = Nullable.Compare<int>(a, b);
    Console.WriteLine(result); //결과 -1

    double? c = 0.01;
    double? d = 0.0100;
    bool result2 = Nullable.Equals<double>(c, d);
    Console.WriteLine(result2); //결과 true
}

 

 

 

 

댓글