Nullable 의 대한 고찰

도입된지 꽤 됐지만 Nullable 의 대한 고찰을 해볼까 하고 Slog를 작성해볼까 합니다.
어찌보면 간단한 개념이지만 Deep 하게 알아보면서 내재화 하고 습관화 하면 좋은 개념이라고
생각합니다.

개념

C# Nullable Type 이란 Null 을 가질 수 없는 데이터 타입을 Null을 가질 수 있는 타입으로 만든 새로운 타입입니다

즉 Value 타입의 대한 NULL 이라는 ‘값이없다’ 를 표현하는데 목적을 둔 Type 이다.

  • 기본적으로 Value 타입 들은 Null 값을 가질수 없다. int,구조체,double, bool 등이 데이타 타입은 값이 없는 상태 Null 의 할당이 불가능하다.

  • Value 타입에 경우 보통 프로그램에서 추정하는 초기값을 가져아한다.
    int i = int.MaxValue ,bool iHasValue = false

개인적인 경험으로 왠만한 Exception 의 절반정도는 Null 에러에서 발생해서 나온 개념이 아닐까 싶습니다.


참고 :

https://www.csharpstudy.com/CSharp/CSharp-nullable.aspx

4 Likes

제 생각에는 DB의 널이 가능한 값 형식을 C#에서 효과적으로 표현하기 위해 만들어 진 것 같습니다.

Java는 의외로 모든 형식을 참조 인스턴스로 표현할 수 있기 때문에 자연스럽게 해결되었습니다.

Integer a;  // 널 가능함

하지만 C#은 int의 구조체인 Int32이 참조 형식이 아니기 때문에 이렇게 표현할 수 없습니다. 그래서 필연적으로? 널 가능 형식이 등장할 수 밖에 없었겠죠.

그래서 Nullable<T>(여기서 T는 struct) 이 준비되었고 이를 좀 더 직관적으로 사용하기 위해 int?로 사용되게 된 것 같습니다.

4 Likes

저는
DBNull.Value
보다는
rust의
Option<T>에 가깝다는 생각이 많이 들었습니다.
어쩌면 후자가 말씀하신 대로 전자 떄문에 생겼을 수도 있을 것 같다고도 생각합니다.

결국 DB의 값도
흔히 농담으로 말하는
휴지의 양이 0이다, 휴지걸이 자체가 없다[…] 를 구분하듯이
후자가 조금 더 ‘값이 없다’ 자체를 추상적으로 표현 한 게 아닐까 싶어요.

2 Likes