산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C# 널 허용 타입(Nullable Types) 완벽 이해: 안전한 null 처리

C#은 널 허용 타입(Nullable Types)이라는 특수 데이터 타입을 제공하여, 정상 범위의 값뿐만 아니라 null 값도 할당할 수 있게 합니다.

예를 들어, Nullable<Int32> 변수에는 -2,147,483,648 ~ 2,147,483,647 범위의 값 또는 null을 저장할 수 있습니다. Nullable<bool>에는 true, false, null이 가능합니다.

선언 구문

<데이터_타입>? <변수_이름> = null;

T?는 Nullable<T>의 축약 표기법입니다.

널 허용 타입 사용 예제

using System;
namespace CalculatorApplication
{
    class NullablesAtShow
    {
        static void Main(string[] args)
        {
            int? num1 = null;           // null 할당
            int? num2 = 45;             // 값 할당
            double? num3 = new double?(); // 기본값 null
            double? num4 = 3.14157;
            bool? boolval = new bool?();  // 기본값 null
            
            // 값 출력 (null은 빈 문자열로 출력됨)
            Console.WriteLine("Nullables: {0}, {1}, {2}, {3}", num1, num2, num3, num4);
            Console.WriteLine("Nullable bool: {0}", boolval);
            Console.ReadLine();
        }
    }
}

출력: Nullables: , 45, , 3.14157 / Nullable bool:

널 병합 연산자 (Null Coalescing Operator: ??)

널 허용 값 타입과 참조 타입에 사용됩니다. 첫 번째 피연산자가 null이면 두 번째 피연산자 값을 반환하고, 아니면 첫 번째 피연산자 값을 반환합니다.

결과 = (첫번째_피연산자 != null) ? 첫번째_피연산자 : 두번째_피연산자;
// 위와 동일: 결과 = 첫번째_피연산자 ?? 두번째_피연산자;

예제

using System;
namespace CalculatorApplication
{
    class NullablesAtShow
    {
        static void Main(string[] args)
        {
            double? num1 = null;
            double? num2 = 3.14157;
            double num3;
            
            num3 = num1 ?? 5.34;   // num1이 null이므로 5.34 반환
            Console.WriteLine("num3 값: {0}", num3);  // 5.34
            
            num3 = num2 ?? 5.34;   // num2가 null이 아니므로 3.14157 반환
            Console.WriteLine("num3 값: {0}", num3);  // 3.14157
            
            Console.ReadLine();
        }
    }
}

널 조건부 연산자 (Null Conditional Operators: ?. / ?[])

C# 6.0부터 추가된 연산자로, null 체크를 간결하게 해줍니다.

// ?. : 멤버 접근 전 null 체크
string name = person?.Name;  // person이 null이면 null 반환, 아니면 Name 반환

// ?[] : 인덱서 접근 전 null 체크
var item = list?[0];  // list가 null이면 null 반환

// 결합 사용
int? length = customers?.Orders?[0]?.Items?.Count;

Nullable<T>의 주요 속성 및 메서드

멤버설명
HasValue값이 있는지 여부 (bool 반환)
Value저장된 값 반환 (값 없으면 예외 발생)
GetValueOrDefault()값이 있으면 반환, 없으면 타입의 기본값 반환
GetValueOrDefault(T defaultValue)값이 없으면 지정한 기본값 반환

활용 예제

int? count = null;

if (count.HasValue)
    Console.WriteLine(count.Value);
else
    Console.WriteLine("값 없음");

// 한 줄로 처리
Console.WriteLine(count.GetValueOrDefault(-1));  // -1 출력
핵심: 값 타입(struct)은 기본적으로 null을 가질 수 없지만, Nullable<T> 또는 T?로 감싸면 null 상태를 표현할 수 있습니다. 데이터베이스 연동이나 선택적 값 처리에 필수적입니다.

C 언어

  1. Java 8 Optional 마스터하기: 널-안전 코드를 위한 실용 가이드
  2. C# 어트리뷰트(Attribute) 마스터하기: 메타데이터로 코드 강화하기
  3. Ferro-Titanit® Cromoni – 고강도 비자성 티타늄 합금
  4. AgCu20 합금: 23°C에서 종합적인 기계적 및 열적 특성
  5. 합금 15CDV6 (DIN 1.7734) – 고강도·인성·용이한 용접성
  6. DIN 1.7734 15CDV6 합금 – 고강도·인성·용이한 용접성 (고강도 열처리품)
  7. 15CDV6 합금 (DIN 1.7734) – 초고강도·용이한 용접·우수 인성 (최고 강도 열처리품)
  8. PtNi10 합금: 종합적인 기계적 및 열적 특성
  9. PtIr10 백금-이리듐 합금: 고강도 고온 소재
  10. Corroplast 플레이트 – 정밀 가공용 고성능 내식 강재