C#의 널 병합 연산자(null coalescing operator, ??)는 nullable 값 형식과 참조 형식에서 사용되는 연산자입니다. 이 연산자는 암시적 변환이 가능한 경우, 한 피연산자를 다른 nullable(또는 non-nullable) 값 형식 피연산자의 타입으로 변환하는 데 활용됩니다.
널 병합 연산자의 동작 원리
널 병합 연산자의 동작 방식은 매우 직관적입니다.
- 첫 번째 피연산자의 값이
null이면 → 두 번째 피연산자의 값을 반환합니다. - 첫 번째 피연산자의 값이
null이 아니면 → 첫 번째 피연산자의 값을 그대로 반환합니다.
즉, null일 가능성이 있는 변수에 기본값(default value)을 손쉽게 지정할 수 있어, if 문이나 삼항 연산자를 사용하는 것보다 코드를 훨씬 간결하게 만들어 줍니다.
예제 코드
다음은 널 병합 연산자의 기본적인 사용 예제입니다.
using System;
namespace Demo {
class Program {
static void Main(string[] args) {
double? num1 = null;
double? num2 = 6.32123;
double num3;
// num1이 null이므로 기본값 9.77이 할당됨
num3 = num1 ?? 9.77;
Console.WriteLine(" Value of num3: {0}", num3);
// num2가 null이 아니므로 num2의 값이 그대로 할당됨
num3 = num2 ?? 9.77;
Console.WriteLine(" Value of num3: {0}", num3);
Console.ReadLine();
}
}
}실행 결과
Value of num3: 9.77 Value of num3: 6.32123
결과 분석
위 예제에서 num1은 null로 초기화되었기 때문에 num1 ?? 9.77 표현식은 오른쪽의 기본값인 9.77을 반환합니다. 반면 num2에는 실제 값 6.32123이 저장되어 있으므로, num2 ?? 9.77은 num2의 값을 그대로 반환합니다.
추가 팁: 널 병합 할당 연산자(??=)
C# 8.0부터는 널 병합 할당 연산자(??=)도 사용할 수 있습니다. 이 연산자는 변수가 null일 때만 오른쪽 값을 할당하므로, 더욱 간결한 코드 작성이 가능합니다.
string name = null; name ??= "기본 이름"; // name이 null이므로 "기본 이름"이 할당됨 Console.WriteLine(name); // 출력: 기본 이름
널 병합 연산자를 적절히 활용하면 null 처리 로직을 한 줄로 정리할 수 있어 코드의 가독성과 안정성이 크게 향상됩니다.