C#에서는 기본적으로 값 형식의 변수에는 null 값을 할당할 수 없습니다. 하지만 변수타입을 nullable으로 변경하면 가능합니다. C# 2.0부터 도입된 기능으로 Nullable<T> 또는 '?'연산자를 사용하여 변수에 null값을 할당받을 수 있습니다. 이번 포스팅에서는 이와 같은 Nullable 타입에 대한 내용을 정리했습니다.
Nullable<T>와 '?'연산자
nullable은 다음과 같이 값형의 변수에 null값을 할당할 수 있게 해 줍니다. Nullable<T>로 정의되며 여기서 T는 데이터형입니다.
Nullable<int> a = null;
Nullable<T>는 '?'연산자로 대체되어 쓸 수 있습니다. 예를 들어 Nullable<int>, Nullable<float>대신에 다음과 같이 쓸 수 있습니다.
int? a = null;
float? fa = null;
'??' 연산자
Nullable 변수의 값을 Nullable이 아닌 일반 변수에 넣으면 다음 예제처럼 형식변환 에러가 발생합니다.
int? a = null;
int b = a; //에러발생
결과
error CS0266: 암시적으로 'int?' 형식을 'int' 형식으로 변환할 수 없습니다.
명시적 변환이 있습니다. 캐스트가 있는지 확인하세요.
위와 같은 경우는 다음과 같이 '??' 연산자를 사용해야합니다. '??' 연산자는 null일 때 0을 할당해 줍니다.
int? a = null;
int b = a ?? 0;
Nullable 변수 비교
null값은 모든 숫자 값보다 작습니다. 하지만 다음과 같이 크기 비교할 때는 조심해야 합니다.
int? a = null;
Console.WriteLine(a >= 5);
Console.WriteLine(a < 5);
결과
False
False
결과값이 모두 false로 나타나게 되어 크기를 직접 비교를 할 수 없습니다. Nullable 변수의 크기를 비교할 때는 다음과 같이Nullable.Compare<T>(T? n1, T? n2) 메서드를 사용합니다. n1이 n2보다 크면 1을 반환하고 작으면 -1을 반환합니다.
int? a = null;
Console.WriteLine(Nullable.Compare<int>(10,5)); //숫자값 비교
Console.WriteLine(Nullable.Compare<int>(a, int.MinValue)); //null과 숫자값 비교
결과
1
-1
위 결과에서 보듯이 null값은 모든 숫자값보다도 작기 때문에 int 자료형의 최소값(-2147483648)보다도 작다는 정상적인 결과가 나타납니다.
Nullable형을 직접 비교를 하려면 ==와 != 연산자만 사용해야합니다. 크기를 비교하고 싶다면 위 예제처럼 compare() 메서드를 사용하시면 됩니다.
[Review]
"초보자를 위한 C# 200제(2판)" / 저자 : 강병익
'Program Language > C#' 카테고리의 다른 글
Part1. C# 첫발 내딛기(32. 조건문) (10) | 2023.02.03 |
---|---|
Part1. C# 첫발 내딛기(31. object 타입) (16) | 2023.01.30 |
Part1. C# 첫발 내딛기(29. default를 이용한 변수 초기화) (8) | 2023.01.26 |
Part1. C# 첫발 내딛기(28. Null 조건 연산자 '?') (4) | 2023.01.24 |
Part1. C# 첫발 내딛기(27. 값 형식과 참조 형식) (12) | 2023.01.22 |
댓글