C#의 Nullable?

Shy·2025년 3월 8일

C#

목록 보기
4/27

C#에서는 기본적으로 값 형식(Value Type) 변수(int, double, bool 등)는 null을 가질 수 없다.
하지만, ?(nullable modifier)를 붙이면 null을 가질 수 있는 변수가 된다.

int? nullableInt = null; // ✅ 가능 (null을 가질 수 있음)
nullableInt = 10;       // ✅ 가능 (값 할당)

즉, ?를 붙이면 해당 값이 null이 될 수도 있고, 숫자 값을 가질 수도 있다.
이렇게 만든 변수를 nullable 타입이라고 한다.


왜 nullable 타입을 사용할까?

C#에서 null을 가질 수 없는 값 형식이 있다면,

  • 데이터베이스에서 null을 다룰 때,
  • 특정 값이 존재할 수도, 존재하지 않을 수도 있을 때

이럴 때 nullable 타입이 유용하다.

예제1: 데이터베이스에서 null을 다룰 때

데이터베이스에서 null값이 들어갈 수 있다. 예를 들어, 고객의 생년월일 필드가 없을 수도 있다.

public class Customer
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime? BirthDate { get; set; } // ✅ 생년월일이 없을 수도 있음
}
// BirthDate 필드는 날짜를 가질 수도 있고, null일 수도 있다.
// 만약 DateTime을 그냥 쓰면 null을 넣을 수 없어 오류가 발생한다!
// 그래서 DateTime?(nullable)로 선언해야 null 값을 가질 수 있다.

Nullable 타입의 특징

1. HasValue, Value 속성

nullable 타입에는 HasValueValue라는 속성이 존재한다.

int? number = 10;

Console.WriteLine(number.HasValue); // ✅ true (값이 있음)
Console.WriteLine(number.Value);    // ✅ 10 (값을 가져옴)

number = null;
Console.WriteLine(number.HasValue); // ✅ false (값이 없음)
  • HasValue: 값이 있으면 true, 없으면 false 반환
  • Value: 실제 값을 가져옴 (null일 때 Value를 사용하면 오류 발생!)

2. ?? (Null Coalescing 연산자)

nullable 변수가 null일 경우 기본값을 지정할 수 있는 방법이다.

int? nullableNumber = null;
int number = nullableNumber ?? 100; // nullableNumber가 null이면 100을 사용

Console.WriteLine(number); // ✅ 100 (nullableNumber가 null이라 기본값 100이 들어감)
  • ?? 연산자는 nullable 값이 null이면 기본값을 제공하는 역할을 한다.
  • 위 코드에서는 nullableNumbernull이므로 number에 100이 들어간다.

3. ?. (Null Conditional 연산자)

nullable 타입을 다룰 때 null체크를 간편하게 할 수 있도록 도와준다.

int? nullableLength = "Hello"?.Length; // ✅ 가능
Console.WriteLine(nullableLength); // 5 (null이 아니므로 길이 반환)

string? nullString = null;
int? length = nullString?.Length; // ✅ null이면 그냥 null 반환
Console.WriteLine(length); // null (오류 없음)
  • ?. 연산자는 왼쪽 값이 null이면 오른쪽을 실행하지 않고 null을 반환한다.

4. GetValueOrDefault()

nullable 타입에서 값이 없을 때 기본값을 가져올 수 있다.

int? nullableNum = null;
Console.WriteLine(nullableNum.GetValueOrDefault()); // ✅ 0 (기본값 반환)
Console.WriteLine(nullableNum.GetValueOrDefault(999)); // ✅ 999 (기본값을 999로 설정)
기능설명예제
nullable 타입 선언?를 붙이면 null을 가질 수 있다.int? x = null;
HasValue 속성값이 있으면 true, 없으면 falsex.HasValue
Value 속성실제 값을 가져온다.x.Value (null이면 오류)
??. 연산자null이면 기본값 지정int y = x ?? 100;
?.연산자null이면 연산하지 않는다.string? s = null; int? len = s?.Length;
GetValueOrDefault()값이 없을 때 기본값 반환x.GetValueOrDefault(999);
profile
신입사원...

0개의 댓글