728x90
반응형
개발하면서 평소 궁금하던 것들을 일기장 형식으로 작성한 것입니다.
참고용으로 봐주시고 피드백이 있다면 언제든지 댓글로 부탁드리겠습니다^^
편의상 본문은 평어로 서술합니다 😇
1. Nullable
👣 Nullable -> Null + able
값이 없다는 것을 표현할 수 있도록 int 같이 null 값을 가질 수 없는 데이터들이 null 값을 가질 수 있도록 하는 것!
• 객체를 참조하는 변수는 (Monster monster 같은) null을 가질 수 있다.
그런데 int, struct 같은 기본 자료형 변수는 null을 가질 수 없기 때문에
C#에서는 값이 없다는 것을 표현할 수 있도록 이 같은 변수들이 null 값을 가질 수 있도록 해주는 문법이 있다!
그것이 바로 Nullable
👣 Nullable 속성과 함수
• Value
◦ Nullable 변수의 값을 리턴
◦ 기존 데이터거나 null이거나!
• HasValue
◦ Nullable 변수의 값이 null이면 False, null이 아니면 True 리턴
• GetValueOrDefault()
◦ null이 아니면 즉 값이 있는 경우 할당된 값을 리턴하고
null이면 기존 타입의 default값을 리턴! (int 라면 0을 리턴)
👣 Nullable 선언 -> ? 를 붙인다.
int? number = null; // ⭕ number = 3; // ⭕ int a = number; // 컴파일 에러 발생❌ int b = number.Value; // ⭕, 그러나 런타임 에러 우려
• number는 null값을 지정하는 것도 가능한 int형 변수가 되었다.
int? number = null;
• a는 Nullable하지 않은 일반 int이므로 number를 받을 수 없다. (변환 불가)
◦ null이라면, 아니라면 if-else문을 통한 체크가 필요!
• number.Value값이 null이 아니라면 문제 없이 b에 할당 되지만,
만약 null이라면 이를 일반 int 변수인 b에서는 이를 할당 받을 수 없기 때문에 런타임 에러가 발생!
// 1. if(number != null) { } // 2. if(number.HasValue) // null이 아니면 True 리턴 { } // 3. int b = number ?? 0;
Monster monster = null; if(monster != null) int monsterId = 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값을 리턴한다는 의미!
반응형
'[언어] > C#' 카테고리의 다른 글
[C#] IEnumerator : 열거자 (0) | 2022.12.22 |
---|---|
[C#] extension 확장 메서드 (0) | 2022.12.21 |
[C#] 5-11 Reflection (0) | 2022.12.13 |
[C#] 5-10 Exception (예외 처리) (0) | 2022.12.08 |
[C#] 5-9 Func, Action (0) | 2022.12.07 |