null 조건부 연산자인 ?. = C# 6.0에서 추가가 됨.
객체의 멤버에 접근하기 전에 해당 객체가 null인지 검사하여 그 결과가 참(객체가 null)이면 그 결과로 null을 반환하고
그렇지 않은 경우에는 .(쩜) 뒤에 지정된 멤버를 반환한다.
예제를 보면은
현재 Foo라는 클래스의 의 객체를 만듦.
new 연산자를 통해서 만들어주었기 때문에 객체는 힙에 올라가게되고
힙메모리에 올라간 주소를 foo라는 이름으로 가르키고 있는 것이다.
그리고 정수값 또는 null값을 가질 수 있는 int? bar라는 변수에
bar = foo?.member; 인 상태인데
foo 객체가 null이 아니면 member필드에 접근을 하게 해주는 형태이다.
당연하게도 bar의 값에는 아무것도 들어가지 않게 된다.
"?[]"도 "?." 연산자와 동일한 기능을 수행하는 연산자이다.
다만, "?[]" 연산자는 배열과 같은 컬렉션 객체의 첨자를 이용한 참조에 사용된다는 점이 다르다.
a?[0] 이라는 말이 결국
a의 객체의 0번째 인덱스가 null인가요 아닌가요? 물어보는 거임.
처음에는 null이라 아무것도 출력을 안하는 것이고
나중에 객체가 만들어져서 정상적으로 출력하는거 볼 수 있다.