C#에서 Nullable DateTime을 사용하면 값 타입인 DateTime에도 null> 값을 할당할 수 있습니다. 일반적으로 값 타입은 null을 가질 수 없지만, 물음표(?) 문법을 활용하면 null 허용(nullable) 형식으로 선언할 수 있습니다.
Nullable DateTime 선언 문법
Nullable DateTime은 다음과 같이 타입 뒤에 물음표를 붙여 선언합니다.
DateTime?
이렇게 선언된 변수에는 실제 날짜/시간 값 또는 null을 모두 저장할 수 있어, 데이터베이스의 NULL 날짜 컬럼을 다룰 때 특히 유용합니다.
예제 코드
다음은 Nullable DateTime을 구현한 전체 예제입니다.
using System;
class Program {
static void Main() {
DateTime? dt = null;
DateFunc(dt);
dt = DateTime.Now;
DateFunc(dt);
dt = null;
Console.WriteLine(dt.GetValueOrDefault());
}
static void DateFunc(DateTime? dt) {
if (dt.HasValue) {
Console.WriteLine(dt.Value);
} else {
Console.WriteLine(0);
}
}
}실행 결과
0 9/17/2018 8:27:07 AM 1/1/0001 12:00:00 AM
코드 설명
위 예제의 핵심 동작은 다음과 같습니다.
1. HasValue 속성: dt.HasValue는 변수에 실제 값이 저장되어 있는지 확인합니다. 값이 있으면 true, null이면 false를 반환하므로, 이를 조건문으로 활용해 안전하게 값을 출력할 수 있습니다.
2. Value 속성: dt.Value는 Nullable 객체에 저장된 실제 DateTime 값을 반환합니다. 단, 값이 null인 상태에서 접근하면 InvalidOperationException 예외가 발생하므로 반드시 HasValue 확인 후 사용해야 합니다.
3. GetValueOrDefault() 메서드: 값이 존재하면 해당 값을, null이면 DateTime의 기본값인 1/1/0001 12:00:00 AM(DateTime.MinValue)를 반환합니다. 실행 결과 세 번째 줄이 바로 이 기본값입니다.
이처럼 Nullable DateTime을 활용하면 날짜 값이 없는 경우를 명확하게 표현할 수 있어, 데이터 처리 로직의 안정성과 가독성을 크게 향상시킬 수 있습니다.