?? null 병합 연산자는 프로그램에서 종종 필요한 변수/객체의 null검사를 간결하게 만들어주는 역할을 한다.
?? 연산자는
두개의 피연산자를 받아들이고 왼쪽 피연산자가 null인지 평가한다.
평가 결과가 null이 아닌 것으로 나타나면 왼쪽 피연산자를 그대로 반환하고,
만약 왼쪽 피연산자가 null인것으로 평가되면 오른쪽 피연산자를 반환한다.
간단한 예제로는 이런것이 있다.
이까지는 OK
다만 더 좋은 예제들과 설명글이 있다.
https://im-first-rate.tistory.com/44
a에다가 null값을 밀어 주고
이것에 대해 null인지 아닌지 확인 하는 방법이
if
삼항 연산자
?? 연산자
이렇게 있다
?? null 병합 연산자를 사용할 경우 확연히 줄어드는 것을 확인 할 수 있다.
이것은 어떻게 되겠는가?
a 가 null값이기 때문에 0을 a에 할당해주는 것이다.
만약 null값이 아니라면 a의 값을 그대로 가지겠지...
List<int> scores = null;
scores ??= new List<int>();
scores.Add(1);
scores 리스트가 new 객체로 생성되지 않은 체
Add 함수를 실행했다면 Null Exception 에러를 많이 봤을 것이다.
그래서 scores 리스트가 Null 이면 new 객체로 생성시켜 scores에 대딥하는 코드이다.
진짜 획기적이다.
// 변수
List<int> scores; // scores = null이 되어야 컴파일 에러가 안나긴함.
int? size;
size = scores == null ? null : (int?)scores.Count;
// 1. 삼항연산자를 사용
size = scores?.Count;
// 2. ?. 연사자를 사용
// scores 객체가 null인지 체크 후
// null 이면 null을 리턴
// null 이 아니면 .Count 를 실행하게 됩니다.
// .Count 속성뿐만 아니라 해당 객체의 메서드/필드도 사용가능하다.
size = scores?.Count ?? 0;
// 3. ?. // ?? 연산자 콜라보레이션
// scores 객체가 null 이면 0
// null 이 아니면 scores.Count 값을 리턴해주게 됩니다.
// ?. // ?? 두개의 연산자를 함께 쓰는 경우가 많으니 숙지하자.
size = scores?[0];
// 4. ?[] 리스트의 indexer를 이용해서 찾을 있다.
// n번째에 있는 값이 null이면 null을
// null이 아니면 그 값을 리턴해준다.