[C#] Nullable Type - "?" 에 대해
in C# on 공부, C#
[C#] Nullable type, “?”에 대해
C# 코드를 보다보니
int?
와 같은 것을 보게 되었다.
C#에서는 Null을 가질 수 없는 타입들에게 특별히 Null을 가질 수 있게 해주는 nullable type이라는 개념을 도입했다.
대표적으로 값 타입들이 null을 가질 수 없는 int, 구조체, double, bool등의 타입에서 사용이 된다.
1. Nullable Type 이란?
Nullable Type이란 Null을 가질 수 없는 데이터 타입을 Null을 가질 수 있는 타입으로 만든 새로운 타입이다.
(클래스와 같은 reference type(참조 타입)은 이미 null 체크가 가능하기 때문에 따로 nullable type으로 만들지 않아도 된다.)
이런 값 타입들에 대해 “값이 없다“를 표현해주기 위해 Nullable Type이 개발 되었다고 한다.
따라서 위에 나온
int?
와 같은 키워드는 int를 nullable int type으로 변경하여 값이 할당 되었는지 아닌지 확인 할 수 있게 된 것이다.
2. Nullable Type의 선언 방법, 속성과 메서드, 주의점
1. 선언 방법
- Nullable
변수명 (ex : Nullable num;) - T? 변수명 (ex : int? num;)
2. 속성과 메서드
1. HasValue 속성
- 값이 있는 경우 : true
- 값이 없는 경우(Null): false
2. Value 속성
- 값이 있는 경우 : 할당된 값
- 값이 없는 경우(Null) : Exception 발생
3. GetValueOrDefault() 메서드
- 값이 있는 경우 : 할당된 값 반환
- 값이 없는 경우(Null) : 기존 타입의 default 값 반환
3. 주의점
Nullable은 중복이 불가능하다.
Nullable<Nullable<int>> num; //불가능
- int, int?는 엄연히 다른 타입이므로 명시적 형 변환이 필요하다.
- Value를 접근할 때는 HasValue로 체크 한 후에 접근하는 것이 안전하다.