Chapter 9-9. 기타문법 : Nullable(널러블)
카테고리: C Sharp
태그: C Sharp Programming
인프런에 있는 Rookiss님의 강의 Part1: C# 기초 프로그래밍 입문 를 듣고 정리한 필기입니다. 😀
👩🏼 Nullable
Nullable 👉 Null + able. 값이 없다는 것을 표현할 수 있도록
int
같이null
값을 가질 수 없는 데이터들이null
값을 가질 수 있도록 하는 것.
- 객체를 참조하는 변수는 (Monster
monster
같은)null
을 가질 수 있다. - 그러나
int
,struct
같은 기본 자료형 변수는null
을 가질 수 없기 때문에 C# 에서는 값이 없다는 것을 표현할 수 있도록 이 같은 변수들이null
값을 가질 수 있도록 해주는 문법이 있다. 👉 Nullable- 값이 없으면
return 0
혹은return -1
이런식으로 많이 표현하는데return null
로 표현할 수 있다면 더 좋을 것이다.
- 값이 없으면
Nullable 속성과 함수
Value
- Nullable 변수의 값을 리턴
- 기존 데이터거나
null
이거나!
HasValue
- Nullable 변수의 값이
null
이면 False,null
이 아니면 True 리턴
- Nullable 변수의 값이
GetValueOrDefault()
null
이 아니면 즉 값이 있는 경우 할당된 값을 리턴하고null
이면 기존 타입의 default 값 리턴. (int
라면 0 을 리턴할 것이다.)
Nullable 선언 👉
?
를 붙인다.
int? number = null; // ⭕
number = 3; // ⭕
int a = number; // ❌ 컴파일 에러 발생
int b = number.Value; // ⭕ But 런타임 에러 우려
number
는null
값을 저장하는 것도 가능한int
형 변수가 되었다.int? number = null;
a
는 Nullable 하지 않은 일반int
이므로number
를 받을 수 없다. (변환 불가)number.Value
값이null
이 아니라면 문제 없이b
에 할당 되지만, 만약null
이라면 이를 일반int
변수인b
에서는 이를 할당 받을 수 없기 때문에 런타임 에러가 발생한다.- 👉 따라서
null
이라면, 아니라면 이런 if-else 문을 통한 체크가 필요하다.// 첫 번째 방법 if (number != null) { }
// 두 번째 방법 if (number.HasValue) // null 이 아니면 True 리턴 { }
// 세 번째 방법 (설명 아래의 ?? 문법 참고) int b = number ?? 0;
- 👉 따라서
Monster monster = null;
if (monster != null)
int mosterId = monster.Id;
else
int monsterId = 0;
객체도 null
인지 아닌지 체크하고 진행할 때가 많다. 위와 같이 할 수도 있지만
int? id = monster?.Id;
이렇게 한 줄로 끝낼 수도 있다. monster?.Id
👉 monster
가 null
이 아니면 monster.Id
가 리턴되고, monster
가 null
이면 null
이 리턴된다.
?? 문법
int b = number ?? 0;
int c = (number != null) ? number.Value : 0;
위 두 줄의 코드는 같은 로직을 한다. ??
을 사용하면 A ?? B
Nullable 변수인 A
가 null
이라면 0 을 리턴하고, null
이 아니라면 그대로 number.Value
값을 리턴한다는 의미이다.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기