[C#] Null과 관련된 연산자들(?, [ ]?, ??)
2022. 3. 13. 14:11ㆍLanguages/C#
*이 글은 <이것이 C#이다> 책을 바탕으로 공부한 글입니다.
프로그래밍을 하다 보면, Null이라는 값을 필연적으로 사용할 때가 많다. Null 값을 할당하고, 그 값을 토대로 어떠한 연산을 하려고 하면 예외(NullReference)가 발생하기 때문에 사전 검사를 먼저 해줘야 한다.
그래서 다음과 같이 검사를 먼저 해주곤 했다.
void Function(Object obj)
{
if (obj != null)
{
...
}
}
하지만, 이런 검사 방식은 조건문이 많아진다면 읽기가 불편해지는 경향이 있었다. 좀 더 축약해서 간편하게 쓸 수 있는 방법이 없을까란 생각과 함께 C# 문법에 대해 더 찾아봤다. 그리고 C# 6.0부터 위에서 고민했던 기능들을 지원하는 것을 확인했다.
1. Null 조건부 연산자
?. 연산자
객체의 멤버에 접근하기 전에, 해당 객체가 null인지 검사한다.
- 객체가 null일 경우 👉🏻 null을 리턴
- 객체가 null이 아닐 경우 👉🏻 .뒤에 지정된 멤버를 리턴
class MyData
{
public int data;
}
MyData myData = null;
int? data = myData?.data; // myData가 null이 아닐 때 멤버에 접근하여 값을 가져옴
위 코드는 myData 객체가 null이므로 "myData?.data"는 null을 리턴할 것이다.
일반적인 값 형식 자료형 int로는 null을 저장할 수 없으므로 Nullable로 선언하여 받았다.
?[ ] 연산자
?. 연산자와 동일한 기능을 수행한다. 차이점이라면, 객체의 멤버 접근이 아니라 배열과 같은 컬렉션 객체의 첨자를 이용한 참조에 사용된다.
ArrayList arrList = null;
arrList?.Add("C#"); // arrList?.이 null을 반환하므로 Add()는 실행되지 않음
arrList?.Add("Unity");
Console.WriteLine($"Count : {arrList?.Count}");
Console.WriteLine($"{arrList?[0]}");
Console.WriteLine($"{arrList?[1]}");
이번엔 null이 아닌 새로운 객체를 생성해서 참조해줬다.
ArrayList arrList = new ArrayList(); // 객체 생성해줌
arrList?.Add("C#");
arrList?.Add("Unity");
Console.WriteLine($"Count : {arrList?.Count}");
Console.WriteLine($"{arrList?[0]}");
Console.WriteLine($"{arrList?[1]}");
?? 연산자
null 병합 연산자로, 두 개의 피연산자를 받아들이고 왼쪽 피연산자가 null인지를 검사한다.
- 왼쪽 피연산자가 null 👉🏻 오른쪽 피연산자를 리턴
- 왼쪽 피연산자가 null이 아니라면 👉🏻 왼쪽 피연산자를 리턴
int? data = null;
Console.WriteLine($"{data ?? 0}"); // data는 null이므로 0이 출력됨
data = 100;
Console.WriteLine($"{data ?? 0}"); // data는 null이 아니므로 100이 출력됨
728x90
반응형
'Languages > C#' 카테고리의 다른 글
[C#] switch 문과 when 절, 그리고 switch 식 (0) | 2022.03.13 |
---|---|
[C#] TryParse() VS Parse() (0) | 2022.03.13 |
[C#] 문자열 서식 맞추기 (string.Format(), 문자열 보간) (0) | 2022.03.09 |
[C#] Nullable (0) | 2022.03.09 |
[C#] CLR(Common Language Runtime)과 네이티브 코드(Native Code) (0) | 2022.03.09 |