Section 8.1: Null 조건부 연산자
?.
연산자는 귀찮은 null check 들을 생략할 수 있도록 도와주는 일종의 syntactic sugar 이다. 이는 "safe navigation 연산자" 라는 또다른 표현으로 알려져 있기도 하다.
예제를 위한 다음 클래스 선언을 살펴본다:
public class Person {
public int Age { get; set; }
public string Name { get; set; }
public Person Spouse { get; set; }
}
만약 어떤 객체가 잠재적으로 null 일수 있는 경우 (예를 들어 특정 함수가 reference 타입을 반환한다거나), 발생할지 모르는 NullReferenceException
을 방지하기 위하여, 해당 객체에 대해 우선적으로 null 체크를 수행하여야 한다. null 조건부 연산자가 없는 상황을 가정해 보면, 아래와 같은 코드를 작성해야 할 것이다:
Person person = GetPerson();
int? age = null;
if (person != null) age = person.Age;
같은 null 체크를 null 조건부 연산자를 이용하여 구현하면 다음과 같다:
Person person = GetPerson();
var age = person?.Age;
// 'age' 는 'person' 이 null 이 아니라 할지라도 'int?' 타입을 가지게 된다
연산자 연결 (chaining) 하기
null 조건부 연산자는 객체의 멤버 및 멤버 객체의 멤버 (sub-member) 에 대해 결합하여 사용할 수 있다.
// `person` 혹은 `person.Spouse` 중 하나만 null 이어도 null 이 될 것이다
int? spouseAge = person?.Spouse?.Age;
null 병합 (coalescing) 연산자와 결합하여 사용하기
null 조건부 연산자는 기본값을 제공하기 위하여 null 병합 연산자와 결합하여 사용될 수 있다:
// spouseDisplayName 은 person, Spouse, 혹은 Name 중 하나라도 null 인 경우 "N/A" 값을 갖게 될 것이다
var spouseDisplayName = person?.Spouse?.Name ?? "N/A";
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.
[출처] https://books.goalkicker.com/CSharpBook/
반응형
'번역 > C# Notes for Professionals' 카테고리의 다른 글
8.3: NullReferenceException 방지하기 (0) | 2020.12.10 |
---|---|
8.2: Null 조건부 인덱스 (index) (0) | 2020.12.10 |
7.5: Null 병합 연산자를 이용한 property 초기화 지연 (lazy initialization) (0) | 2020.12.07 |
7.4: 기존 객체를 사용하거나 없는 경우 새로 생성하기 (0) | 2020.12.04 |
7.3: Null 병합 연산자를 메소드 호출 결과에 사용하기 (0) | 2020.12.04 |