본문 바로가기

Programming Language/C#

[C#] Nullable 타입 ( ?, ?? )

  • T 는 기본 값 형식( int,double 등 ) 을 나타낸다
  • Int? 는 Nullable 와 동일하다.
  • 레퍼런스 타입은(class) Nullable 을 쓸 필요가 없는데, 그것은 모든 레퍼런스 타입은 이미 Null 을 허용하기 때문이다.
  • Null 상태를 체크할 수 있는 기능 HasValue 을 가지고 있다.

Nullable 상태체크 예제


namespace Nullable
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 일반적인 값 형식 변수
            // int regularInt = 10;

            // Nullable 값 형식 변수
            int? nullableInt = null;

            // 값 형식에 null 을 할당할 수 없음
            //int invalidInt = null; 

            if (nullableInt.HasValue) {
                Console.WriteLine("NullableInt :" + nullableInt);
            }else {
                Console.WriteLine("NullableInt is null");
            }

            // 조건부 연산자(??) 를 사용해 간결하게 처리
            int result = nullableInt ?? 5; // nullableInt 가 null 이라면 5 출력
            Console.WriteLine("Result:" + result );
        }
    }
}

Nullable 정적 클래스


  1. Compare: Nullable.Compare<T> 메서드는 두 Nullable<T> 변수를 비교하고 결과를 반환합니다. 반환 값은 ab보다 작으면 음수, 같으면 0, 크면 양수입니다. ( -1,1)
  2. Equals: Nullable.Equals<T> 메서드는 두 Nullable<T> 변수를 비교하여 값이 같은지 여부를 반환합니다. ( true, false)

[ 예제 코드 ]


namespace NullableStatic
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // Compare<T> 예제
            NullableCompareExample();
            // Equals<T> 예제
            NullableEqualsExample();
        }

        static void NullableCompareExample()
        {
            int? a = null;
            int? b = 0;

            int result = Nullable.Compare<int>(a, b); // a 가 null 즉 b 보다 적으므로 -1 출력
            Console.WriteLine(result);
        }

        static void NullableEqualsExample()
        {
            double? c = 0.01;
            double? d = 0.0100;

            bool result = Nullable.Equals<double>(c, d);
            Console.WriteLine(result); // True : c 와 d 의 값은 수학적으로 같으므로 true 
        }

    }
}