Nullable
- 값 형식에 null을 넣는 방법
- Fake Null
- Nullable은 모두 UnityEngine.Object 타입에 사용 불가
- if를 사용한 null 체크를 사용해야 함
1. ?
int? i = null;
float? f = null;
bool? b = null;
double? d = null;
char? c = null;
Vector3? vec = null;
System.Nullable<bool> mybool;
- Nullable 속성
- HasValue : 값이 Null이 아닌지 체크
int? num = null;
if(num.HasValue){...}
- Value: 해당 값 리턴
- 내부적으로 int numValue = (int)num 수행
int numValue = num.Value;
- GetValueOrDefault (int num): 값 리턴(Null일 경우 기본 값(or num))
2. ?.
- 참조 형식의 nullable에 사용
- null이면 뒤에 오는 함수나 프로퍼티 실행 X
void Start(){
string s = null;
print(s?.IndexOf('링));
}
3. ??
int? num = null;
print(num ?? -1);
string s = null;
print(s?.IndexOf('링') ?? -1)
4. ??=
int? num = null;
num ??= -1;
5. ?[]
- 참조 형식의 nullable 인덱서에 사용
- null 이면 뒤에 오는 함수나 프로퍼티 실행X
int[] nums
private void Start(){
int? num = nums?[0]
print(num)
}
6. Fake Null;
- UnityEngine.Object에는 Nullable 사용 불가
- UnityEngine.Object를 다룰 경우 if를 사용한 null 체크를 수행해야 함
- Transform
- Rigidbody... etc
[SerializeField] Rigidbody rb;
private void Start(){
if(rb != null) rb.MovePosition(Vector3..one);
Rigidbody rb2 = rb == null ? null : GetComponent<Rigidbody>();
}