본문 바로가기
2학년 2학기/윈도우즈 프로그래밍

Nullable Type

by print_soo 2024. 9. 30.

널이 가능한 형(Nullable Type)값 형식(Value Type)null 값을 허용할 수 있도록 하는 C#의 기능입니다. 기본적으로 값 형식(int, float, bool 등)은 null 값을 가질 수 없습니다. 하지만 널이 가능한 형을 사용하면 값이 없음을 나타내는 null을 할당할 수 있습니다.

 

 

1. 널이 가능한 형의 정의

널이 가능한 형은 기본 값 형식 뒤에 ? 기호를 붙여 정의할 수 있습니다. 이렇게 정의된 변수는 값이 없음을 의미하는 null 값을 가질 수 있습니다.

  • 예시: int?, float?, bool? 등이 널이 가능한 형입니다.
int? age = null;  // 널이 가능한 int 형
double? temperature = 36.5;  // 값이 존재하는 경우

 

 

 

2. 널이 가능한 형 사용 방법

널이 가능한 형은 기본 값 형식이므로, 값을 할당하거나 null을 할당할 수 있습니다.

int? number = null;  // 널 값을 가짐
number = 10;  // 값이 존재함

 

 

 

3. HasValueValue 프로퍼티

널이 가능한 형에는 두 가지 중요한 프로퍼티가 있습니다:

  • HasValue: 해당 변수가 값을 가지고 있으면 true, null이면 false를 반환합니다.
  • Value: 널이 아닌 경우, 그 값을 반환합니다. 만약 null일 때 Value를 호출하면 예외가 발생합니다.
int? age = null;

if (age.HasValue) {
    Console.WriteLine($"Age is {age.Value}");
} else {
    Console.WriteLine("Age is not provided");
}

위 예시에서 agenull이면 "Age is not provided"가 출력되고, 값이 존재하면 그 값을 출력합니다.

 

 

 

4. 널 병합 연산자 (??)

널 병합 연산자(??)는 널이 가능한 형에 값이 없을 때 대체 값을 제공할 수 있는 방법입니다. ?? 연산자는 널이 아닌 값이 나오면 그 값을 사용하고, 그렇지 않으면 대체 값을 반환합니다.

  • 예시:
int? age = null;
int defaultAge = age ?? 18;  // age가 null이므로 defaultAge에 18이 할당됨
Console.WriteLine(defaultAge);  // 출력: 18

 

 

 

5. 널이 아닌 값으로 변환 (Null Coalescing Assignment)

C# 8.0 이후로 도입된 널 병합 할당 연산자(??=)는 변수가 null일 때만 값을 할당하는 기능을 제공합니다.

int? num = null;
num ??= 100;  // num이 null이면 100을 할당
Console.WriteLine(num);  // 출력: 100

 

 

 

6. 널과 관련된 주의 사항

널이 가능한 형을 사용할 때, 변수에 실제로 값이 존재하는지 항상 확인하는 것이 중요합니다. 그렇지 않으면 NullReferenceException이나 InvalidOperationException이 발생할 수 있습니다.

int? num = null;
// Console.WriteLine(num.Value);  // 예외 발생: InvalidOperationException

위 코드에서 numnull일 때 Value 프로퍼티에 접근하면 예외가 발생합니다.

 

 

 

 

요약

  • 널이 가능한 형은 값 형식에 null을 허용하는 기능입니다.
  • ?를 사용하여 값 형식을 널이 가능하게 만들 수 있습니다.
  • HasValueValue를 통해 값이 있는지 확인하고 접근할 수 있습니다.
  • 널 병합 연산자 (??)null일 경우 대체 값을 반환합니다.
  • C# 8.0부터는 널 병합 할당 연산자 (??=)를 사용하여 null일 때만 값을 할당할 수 있습니다.

이러한 기능은 프로그램에서 값이 없음을 처리할 때 유용하며, 특히 데이터베이스나 외부 데이터와 상호작용할 때 널 값 처리가 중요한 경우 유용하게 사용할 수 있습니다.

'2학년 2학기 > 윈도우즈 프로그래밍' 카테고리의 다른 글

필드와 프로퍼티의 차이  (0) 2024.09.30
표준 입출력  (0) 2024.09.30
오버 플로우 검사문 (Checked)  (0) 2024.09.30
Break와 Continue  (0) 2024.09.30
형변환(캐스팅)  (0) 2024.09.30