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/

반응형

+ Recent posts