Section 3.7: ?. (Null 조건부 연산자)

Version ≥ 6.0

C# 6.0 에서 추가된 Null 조건부 연산자 (Conditional Operator) 인 ?. 는, 좌측항의 표현식이 null 로 평가 (evaluate) 될 경우 NullReferenceException 을 throw 하는 대신 null 값을 반환하여 준다. 또한 좌측항이 null 이 아닌 값으로 평가되는 경우에는, 일반적인 . 연산자와 동일하게 취급될 것이다. 유의할 점은, 해당 연산자가 null 을 반환할 수 있기 때문에, 반환 타입이 항상 nullable 타입이어야 한다는 것이다. 이것이 의미하는 바는, 구조체 (struct) 혹은 기본 형식 (primitive type) 에 대해서는 그 값이 Nullable<T> 로 싸여질 것이라는 의미이다.

var bar = Foo.GetBar()?.Value; // GetBar() 가 null 을 반환할 경우 bar 에 null 값이 할당될 것이다 var baz = Foo.GetBar()?.IntegerValue; // baz 는 Nullable<int> 타입이 될 것이다, 예: int?

이는 이벤트를 발생시키는 경우에 편리하게 사용할 수 있다. 통상적으로 사용자는 이벤트 호출 코드를 null 검사를 수행하는 if 문으로 감싼 후 이벤트 발생을 시켜야 하나, 이는 경쟁 상태 (race condition) 를 유발할 수 있다. Null 조건부 연산자를 이용하면 이러한 문제를 아래와 같은 방법으로 해결할 수 있다:

event EventHandler<string> RaiseMe; RaiseMe?.Invoke("Event raised");
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

+ Recent posts