728x90
반응형
1. ?? 연산자 (null 병합 연산자)
- 좌측 값이 null인지 먼저 확인한다.
- null이면 우측 값을 반환하고, null이 아니면 좌측 값을 그대로 반환한다.
- 예를 들어 어떤 값이 null일 때 대신 쓸 기본값을 지정하기에 편리하다.
float? nullableValue = null;
float result = nullableValue ?? -1f; // nullableValue가 null이므로 -1f가 반환됨
Console.WriteLine(result); // -1 출력
nullableValue = 10.5f;
result = nullableValue ?? -1f; // 이번엔 null이 아니므로 10.5f 유지
Console.WriteLine(result); // 10.5 출력
2. ?. 연산자 (null 조건부 연산자)
- 좌측 값이 null인지 확인한 뒤, null이면 뒤에 이어지는 멤버 접근이나 메서드 호출을 하지 않고 그냥 null을 반환한다.
- null이 아니라면 정상적으로 뒤의 멤버나 메서드를 호출한다.
- 참조 타입뿐 아니라 Nullable<T> 같은 값 타입에도 적용 가능하다.
string text = null;
int? length = text?.Length;
// text가 null이므로 text?.Length는 null 반환
Console.WriteLine(length); // 아무것도 출력되지 않음(값은 null)
// 이번에는 text에 값이 있으니까 Length를 정상적으로 구함
text = "Hello World";
length = text?.Length;
Console.WriteLine(length); // 11 출력
Nullable<float> 변수를 사용할 때:
float? optionalFloat = 10.5f;
string floatString = optionalFloat?.ToString(); // "10.5"
Console.WriteLine(floatString);
optionalFloat = null;
floatString = optionalFloat?.ToString(); // null 반환
Console.WriteLine(floatString); // 아무것도 출력 안 함
→ optionalFloat가 null이 아니면 ToString()을 호출해 문자열을 반환하고, null이면 ToString() 호출 없이 null을 반환한다.
3. 정리
- ??는 “좌측이 null이면 우측 대체 값을 쓰자”라는 의미의 null 병합 연산자다.
- ?.는 “좌측이 null이 아니면 다음 멤버를 호출하고, null이면 그냥 null로 두자”라는 의미의 null 조건부 연산자다.
둘 다 null 안전 처리를 간단하게 만들어주는 문법이며, 함께 사용하면 if문에 비해 깔끔한 코드를 작성할 수 있다.
반응형