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값을 리턴한다는 의미이다.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기