C#에서 ??는 널 병합 연산자(Null-Coalescing Operator)입니다. 이 연산자는 왼쪽 피연산자가 null이 아니면 그 값을 그대로 반환하고, null이라면 오른쪽 피연산자를 평가한 결과를 반환합니다. 특히 왼쪽 피연산자가 null이 아닌 경우에는 오른쪽 피연산자 자체를 평가하지 않기 때문에 불필요한 연산을 줄여줍니다.
널 병합 연산자가 필요한 이유
nullable 타입은 값이 정의되지 않은 상태(null)이거나 해당 타입의 유효한 값을 가질 수 있는 타입입니다. 왼쪽 피연산자가 nullable 타입일 때, ?? 연산자를 사용하면 적절한 기본값을 반환할 수 있습니다.
만약 ?? 연산자 없이 nullable 값 타입을 non-nullable 값 타입에 직접 할당하려고 하면 컴파일 타임 에러가 발생합니다. 또한 강제로 캐스팅을 시도하면 런타임에 InvalidOperationException 예외가 발생할 수 있습니다.
널 병합 연산자(??)의 장점
- nullable 항목(값 타입과 참조 타입 모두)에 대한 기본값을 간결하게 정의할 수 있습니다.
- 런타임
InvalidOperationException예외 발생을 방지합니다. - 반복적인 if 조건문을 제거하여 코드를 단순화합니다.
- 참조 타입과 값 타입 모두에서 사용 가능합니다.
- 코드가 체계적으로 정리되어 가독성이 크게 향상됩니다.
사용 예제
using System;
namespace MyApplication{
class Program{
static void Main(string[] args){
int? value1 = null;
int value2 = value1 ?? 99;
Console.WriteLine("Value2: " + value2);
string testString = "Null Coalescing";
string resultString = testString ?? "Original string is null";
Console.WriteLine("The value of result message is: " + resultString);
}
}
}실행 결과
위 예제 코드를 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.
Value2: 99 The value of result message is: Null Coalescing
첫 번째 예제에서 value1이 null이므로 ?? 연산자는 기본값인 99를 반환했습니다. 반면 두 번째 예제에서 testString은 null이 아니기 때문에 원래 문자열 값이 그대로 반환된 것을 볼 수 있습니다.