C# 널 병합 연산자 이해하기
C#의 null 병합 연산자(??)를 사용하면 개발자는 null 검사 로직을 간소화하여 코드의 장황함을 줄이고 가독성을 향상시킬 수 있습니다. 길고 복잡한 if-else 조건을 작성하는 대신, 이 연산자는 null 값을 만났을 때 대체 값을 할당하는 간결한 방법을 제공합니다. 이 글에서는 Gerald Versluis의 비디오를 따라가면서 널 병합 연산자를 자세히 살펴보겠습니다. C# 널 병합 연산자(??) 이해하기 그리고 ??=) (https://www.youtube.com/watch?v=aIp0jUr6A24&list=PLfbOp004UaYWWOZFZ585BCeRvTduLt9Fm&index=11) 영상의 주요 부분을 분석하고 제럴드가 이 유용한 C# 기능을 어떻게 시연하는지 살펴보겠습니다.
소개
영상 초반에 제럴드는 C#의 강력한 기능인 널 병합 연산자를 소개하며, 이 연산자가 널 검사에 필요한 코드 줄 수를 크게 줄여준다고 설명합니다. 그는 이 연산자가 조건 검사를 단순화하고 코드를 더 읽기 쉽게 만든다고 강조합니다. 그 이점을 설명하기 위해 제럴드는 샘플 애플리케이션을 통해 널 병합 연산자의 다양한 사용 사례를 구현하고 설명합니다.
샘플 앱 개요
제럴드는 간단한 콘솔 애플리케이션을 설정하는 것으로 시작합니다. 그는 이전 영상에서 시연을 위해 try.dot .NET 웹사이트를 사용했지만, 버전 제한(C# 7만 지원) 때문에 Visual Studio for Mac으로 전환했다고 언급합니다. 그는 해당 예제들이 윈도우용 Visual Studio에서도 작동할 것이라고 확신시켜 줍니다.
시연 준비를 위해, 제럴드는 단일 Name 속성이 있는 기본 Person 클래스를 생성합니다:
public class Person
{
public string Name { get; set; }
}public class Person
{
public string Name { get; set; }
}그는 이 클래스의 인스턴스를 초기화하여 null 병합 연산자가 실제 시나리오에서 어떻게 작동하는지 보여줍니다.
널 검사를 널 병합 연산자로 대체(??)
제럴드는 이제 널 병합 연산자(??)를 사용하여 널 검사 로직을 단순화하는 방법을 보여줍니다. 그는 Name 속성에 null을 할당하고 ??를 사용합니다. 대체값을 제공하기 위해:
var name = person.Name ?? "Gerald";var name = person.Name ?? "Gerald";제럴드는 이 연산자가 나오기 전에는 개발자들이 if 문을 사용했다고 설명합니다.
string name;
if (person.Name == null)
{
name = "Gerald";
}
else
{
name = person.Name;
}string name;
if (person.Name == null)
{
name = "Gerald";
}
else
{
name = person.Name;
}??를 사용하여 이 논리는 한 줄로 축소됩니다. person.Name가 null일 때, 'Gerald'가 할당됩니다; 그렇지 않으면 person.Name는 자신의 값을 유지합니다. 그는 프로그램을 실행하고 출력 결과가 정확한지 확인합니다.
예외를 발생시키기 위한 널 병합
다음으로 제럴드는 또 다른 사용 사례인 null 병합 연산자를 사용하여 예외를 던지는 방법을 살펴봅니다. 그는 대체 값을 제공하는 대신 null을 만났을 때 예외를 발생시키는 방법을 보여줍니다.
var name = person.Name ?? throw new ArgumentNullException(nameof(person.Name), "Name cannot be null");var name = person.Name ?? throw new ArgumentNullException(nameof(person.Name), "Name cannot be null");제럴드는 특히 null 값이 허용되지 않아야 하는 메서드 매개변수나 속성을 다룰 때 이 기능이 유용하다고 강조합니다. 그는 이 기능이 프로젝트 설정에 따라 C# 7 또는 8 버전에서 도입되었다고 설명합니다. person.Name의 값이 null인 상태로 코드를 실행하면 ArgumentNullException가 발생하여 의도하지 않은 null 참조를 효과적으로 방지합니다.
널 병합 복합 할당(??=)
제럴드는 이어서 기본값을 할당하는 더욱 간소화된 방법을 제공하는 널 병합 복합 할당 연산자(??=)에 대해 설명합니다. 다음과 같이 쓰는 대신에:
if (person.Name == null)
{
person.Name = "Gerald";
}if (person.Name == null)
{
person.Name = "Gerald";
}그는 이를 다음과 같이 간소화합니다.
person.Name ??= "Gerald";person.Name ??= "Gerald";제럴드는 ??= 연산자는 왼쪽 피연산자가 null인 경우에만 지정된 값을 할당한다고 설명합니다. person.Name에 이미 값이 있으면 변경되지 않습니다. 이 연산자는 필드를 초기화하거나 변수가 절대 null이 되지 않도록 하는 데 특히 유용합니다.
널 조건 연산자와 결합
마지막 부분에서 제럴드는 널 병합 연산자를 널 조건 연산자(?.)와 결합하는 방법을 보여줍니다. null 조건 연산자를 사용하면 NullReferenceException를 발생시키지 않고 속성에 안전하게 접근할 수 있습니다. 그는 다음과 같은 예를 제시합니다.
var length = person?.Name?.Length ?? 0;var length = person?.Name?.Length ?? 0;제럴드는 person 또는 Name가 null인 경우, 예외를 던지는 대신 결과가 기본적으로 0이 되도록 보장한다고 설명합니다. 이 조합은 null 허용 참조 형식이나 복잡한 객체 계층 구조를 다룰 때 유용합니다.
결론
이 영상에서 제럴드 버슬루이스는 널 병합 연산자(??)와 널 병합 복합 할당 연산자(??=)의 강력한 기능을 효과적으로 설명합니다. 그는 이러한 연산자들이 기존의 널(null) 검사를 대체하여 코드를 더욱 간결하고 읽기 쉽게 만드는 방법을 보여줍니다. 이러한 기능을 활용하면 개발자는 더욱 깔끔하고 효율적인 C# 애플리케이션을 작성할 수 있습니다.
이러한 개념이 실제로 어떻게 적용되는지 보고 싶으시다면, Gerald Versluis의 "C# Null 병합 연산자(??) 이해하기" 전체 영상을 확인해 보세요. 그리고 ??=)"

