반응형
Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

개발꿈나무

[C# 교과서] 12. C# 활용(6) - 널(null) 다루기 본문

C# 기초

[C# 교과서] 12. C# 활용(6) - 널(null) 다루기

HYOKYE0NG 2022. 1. 18. 09:20
반응형
널(null) 다루기

 

  • 프로그래밍 언어에서 널(Null, NULL, null, nil)은 아무것도 없는 상태를 나타낸다.
  • 개체가 아무것도 참조하지 않는 것을 null 참조라고 한다.

 

null 값

  • 아무런 값이 없음
  • 참조형 변수에 아무런 값을 설정하지 않음
  • 알려지지 않은 값으로 아무 의미가 없거나 모르는 값, 값이 없음을 의미
  • 변수가 아무런 값도 가리키고 있지 않음
  • 변수가 이름만 만들고 아무런 참조도 하지않음
  • 개체가 만들어지고 아무런 값도 참조하지 않음을 나타냄
  • 영어 단어로는 undefined
  • 빈 값(Empty, "")과는 다름

 

null 가능 형식: Nullable<T> 형식

기본 제공 형식을 null이 가능한 형식으로 변경하려면 Nullable<T> 제네릭 형식을 사용한다.

Nullable 형식을 줄임 표현하는 방법은 데이터 형식 뒤에 ?(물음표) 기호를 붙이는 것이다. EX) bool?, int?

 

bool과 Nullable<bool>의 차이는 다음과 같다.

  • bool 형식은 true와 false를 갖는다.
  • Nullable<bool> 형식은 true, false, null을 갖는다.

 

Nullable<T> 형식이 제공하는 주요 멤버

  • HasValue 속성: 값이 있으면 true, null 값이면 false를 반환
  • Value 속성: 값 반환
  • GetValueOrDefault: 값 또는 기본값 반환

 

 

null 값을 다루는 연산자

 

??연산자(null 병합 연산자): 왼쪽 항이 null이 아니면 해당 값 반환, 그렇지 않으면 오른쪽 값 반환

using System;

class NullCoalescing
{
    static void Main()
    {
        var result = "";
        var message = "";

        message = null;
        result = message ?? "기본값";
        Console.WriteLine(result); // 기본값

        message = "있는값";
        result = message ?? "기본값";
        Console.WriteLine(result); // 있는값
    }
}

 

null 가능 형식에 null 병합 연산자 사용하기

using System;

class NullCoalescingOperator
{
    static void Main()
    {
        int? value = null; // null 가능 형식에 null로 초기화
        int defaultValue = value ?? -1; // value가 null이면 -1 대입
        Console.WriteLine(defaultValue); // -1
    }
}

 

null 병합 연산자와 default 키워드

using System;

class NullableTypeCheck
{
    static void Main()
    {
        int? x = null;

        int y = x ?? 100; // x가 null이면 100으로 초기화

        int z = x ?? default(int); // x가 null이면 정수형의 기본값인 0으로 초기화

        Console.WriteLine($"y: {y}, z: {z}"); // y: 100, z: 0
    }
}

 

null 조건부 연산자(?.): 변수 값이 null이면 null 값 반환, null이 아니면 ?. 연산자 뒤의 속성 또는 메서드 실행

using System;

class NullConditional
{
    static void Main()
    {
        int? len;
        string message;

        message = null;
        len = message?.Length; // null
        if (len == null)
        {
            Console.WriteLine("[1] message는 null입니다.");
        }

        message = "안녕";
        len = message?.Length; // 2
        if (len != null)
        {
            Console.WriteLine($"[2] message는 {len}자입니다.");
        }
    }
}

// [1] message는 null입니다.
// [2] message는 2자입니다.

 

null 조건부 연산자와 null 병합 연산자 함께 사용하기

using System;
using System.Collections.Generic;

class NullCoalescingWithCollection
{
    static void Main()
    {
        int num;
        List<string> list;

        //[1] 컬렉션 리스트가 null이면 Count를 읽을 수 없기에 0으로 초기화
        list = null; 
        num = list?.Count ?? 0; // null이면 0 반환, null이 아니면 list.Count 반환
        Console.WriteLine($"[1] 컬렉션 카운트: {num}"); // 0

        //[2] 컬렉션 리스트가 null이 아니면 Count 속성의 값을 사용 
        list = new List<string>(); list.Add("또 만나요.");
        num = list?.Count ?? 0; // null이 아니기 때문에 list.Count 반환
        Console.WriteLine($"[2] 컬렉션 카운트: {num}"); // 1
    }
}

/*
[1] 컬렉션 카운트: 0
[2] 컬렉션 카운트: 1
*/

?. 연산자의 결괏값이 null이면 null 대신에 ?? 연산자를 사용하여 새로운 값으로 초기화한다.

null 관련 연산자 2개를 함꼐 사용하는 list?.Count ?? 0 코드는 복잡해 보여도 사용성이 높기 때문에 익혀두는 것이 좋다.

 

 

 

 

<Reference>

 

반응형
Comments