728x90
반응형

널 조건 연산자 (Null-conditional operator)

C# 6.0 이상에서는 연산자 하나로 깔끔하게 해결할 수 있다. (= 널조건 연산자)

 

? 널 조건 연산자
 ? 앞에 있는 객체가 Null인지 체크해서 Null이면 그냥 Null을 리턴하고, 그렇지 않으면 ? 다음의 속성이나 메서드를 실행한다.

 

하나하나 if문으로 null체크를 할 필요가 없이 축약해서 사용할 수 있어지는 것이다.

 

문법적인 측면에서 ? 다음에 일반적으로 속성이나 메서드가 오기 때문에 ?. 와 같이 표현되지만, 만약 인덱서 혹은 배열 요소 등을 접근할 경우는 ?[] 와 같이 표현될 수도 있다.

 

  • 예시
// rows가 NULL이면 cnt 도 NULL
// rows가 NULL이 아니면 cnt는 실제 rows 갯수
int? cnt = rows?.Count;

// customers 컬렉션이 NULL이면 c는 NULL
// 아니면, c는 첫번째 배열요소
Customer c = customers?[0]; 

// customers가 널인지 체크하고
// 다시 customers[0]가 널인지 체크
int? age = customers?[0]?.Age;

?? 연산자

널 조건 연산자만을 사용하게 되면, 리턴 변수는 항상 null을 가질 수 있는 Nullable type이어야 한다.

?. 연산자 앞의 값이 null 인 경우, null을 리턴해야 하기 때문이다.

 

만약 리턴 변수가 null을 가질 수 없거나, null이 아니라 특정 값이 필요하다면 ??연산자를 함께 사용하게 된다.

 

?? 연산자

 null인 경우 ?? 뒤의 디폴트 값을 리턴하는 것인데, 이렇게 되면 리턴 변수형이 꼭 Nullable Type이 아니어도 되고 특정 값으로 지정도 가능하다.

 

  • 예시
// rows가 NULL이면 cnt = 0
// 아니면 cnt는 실제 rows 갯수

int cnt = rows?.Count ?? 0;

연산자 설명 사용 예시
?. null 체크 후 속성이나 메서드에 접근 int? cnt = row?.Count;
?[] null 체크 후 인덱서 혹은 배열요소 접근 Customer c = costomer?[0];
?? null 체크 후 null이 아닐 시 왼쪽, null인 경우 오른쪽 값 리턴 int cnt = rows?.Count ?? 0;

참고 사이트

https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/operators/null-coalescing-operator

 

?? 및 ??= 연산자 - C# 참조

???? 및 ??= 연산자(C# 참조)and ??= operators (C# reference) 이 문서의 내용 --> null 병합 연산자 ??는 null이 아닌 경우 왼쪽 피연산자의 값을 반환합니다. 그렇지 않으면 오른쪽 피연자를 평가하고 그 결과��

docs.microsoft.com

http://www.csharpstudy.com/CS6/CSharp-null-conditional-operator.aspx

 

C# 6.0 널 조건 연산자 - C# 프로그래밍 배우기 (Learn C# Programming)

널 조건 연산자 (Null-conditional operator) C# 프로그래밍에서 NULL 체크만큼 많은 시간을 할애하는 곳도 아마 드물 것이다. 즉, 객체의 메서드나 속성을 사용하기 전에 객체가 NULL인지 항상 체크해 줘야

www.csharpstudy.com

 

728x90
반응형