[C#] Null 조건부 연산자(null-conditional operator) Elvis 연산자

1. 💡 ?. (Elvis) 연산자

_logger?.LogInfo($"[ConfigurationService] 설정 파일 로드 시작: {_settingsFilePath}");

C#에서는 위와 같이 ?. 와 같은 표현식을 볼 수 있는데 이를 Elvis 연산자라고 부르며 위 코드는 아래와 같이 동작한다.

 

 

1. _logger가 null이 아닌 경우: LogInfo 메서드를 정상적으로 호출

2. _logger가 null인 경우: LogInfo 메서드를 호출하지 않고 그냥 건너뜀. (NullReferenceException이 발생하지 않음)

 

 

2. 일반적 Null 체크와 비교

// 기존 방식
if (_logger != null)
{
    _logger.LogInfo($"[ConfigurationService] 설정 파일 로드 시작: {_settingsFilePath}");
}

// ?. 연산자 사용
_logger?.LogInfo($"[ConfigurationService] 설정 파일 로드 시작: {_settingsFilePath}");

 

 

 

3. C#의 Null 관련 편의 기능들 정리

// 1. ?. (null 조건부 연산)
var length = text?.Length;

// 2. ?? (null 병합 연산)
string name = userName ?? "Guest";

// 3. ??= (null 병합 할당)
config ??= LoadDefaultConfig();  // config가 null일 때만 할당

// 4. ?[] (null 조건부 인덱서)
var firstItem = items?[0];

// 5. C# 8.0 이후 - nullable reference types
string? nullableString = null;  // 명시적으로 null 가능
string nonNullString = "text";  // null 불가능