이번 글에서는 널 병합 연산자에 대해서 자세히 알아보겠습니다.널 병합 연산자(Null Coalescing Operator: ??)는 C#에서 널(null) 값을 처리하거나 디폴트 값을 지정하는 데 사용됩니다. 이 연산자는 주로 Nullable 형식 변수에서 널 값일 때 기본값을 설정할 때 유용하게 사용됩니다.
일반구문
널 병합 연산자의 구문은 다음과 같습니다: nullableVariable ?? defaultValue.
이때 nullableVariable은 Nullable 변수이며, defaultValue는 널 값일 때 대체할 기본값입니다.
예를 들어, 나이를 저장하는 Nullable 변수를 사용하여 널 값일 때 디폴트 나이를 설정하는 상황을 살펴보겠습니다.
// Nullable 변수를 선언하고 널(null) 값을 할당합니다.
int? userAge = null;
// 널 병합 연산자를 사용하여 널 값일 때 디폴트 값을 설정합니다.
int defaultAge = userAge ?? 18;
// 결과 출력
Console.WriteLine($"User's Age: {defaultAge}");
위 예제에서 userAge 변수는 Nullable 정수형으로 선언되었고, 초기값으로 널(null)을 가지고 있습니다. 그리고 defaultAge 변수에 널 병합 연산자(??)를 사용하여 기본값을 설정했습니다.
만약 userAge 변수가 널(null) 값을 가지고 있다면, defaultAge 변수에는 우측의 디폴트 값인 18이 할당됩니다. 하지만 userAge 변수가 널(null)이 아니라 실제 값(예: 25)을 가지고 있다면, defaultAge 변수에는 userAge 변수의 값이 할당됩니다.
이러한 널 병합 연산자는 Nullable 변수를 다룰 때 유용하며, 널 값이 될 가능성이 있는 변수의 기본값 설정에 활용될 수 있습니다.
GET / SET 구문
널 병합 연산자를 get과 set으로 사용하는 예제를 보여드리겠습니다.
아래의 코드는 속성에 널 병합 연산자(??)를 적용하여 속성 값이 널(null)인 경우에만 기본값을 설정하는 예제입니다.
public class Person
{
private string _name;
public string Name
{
get
{
return _name ?? "이름 없음"; // 널 병합 연산자를 사용하여 _name이 널(null)인 경우 "이름 없음"을 반환합니다.
}
set
{
_name = value; // set 접근자에서는 받은 값을 _name에 할당합니다.
}
}
}
class Program
{
static void Main(string[] args)
{
Person person1 = new Person();
Console.WriteLine(person1.Name); // 초기값이 설정되지 않았으므로 "이름 없음" 출력
person1.Name = "Alice";
Console.WriteLine(person1.Name); // "Alice" 출력
Person person2 = new Person();
person2.Name = null; // Name 속성에 null 값을 할당
Console.WriteLine(person2.Name); // "이름 없음" 출력 (널 병합 연산자로 인해 "이름 없음" 반환)
}
}
위의 예제에서 Person 클래스는 Name이라는 속성을 가지고 있습니다. get 접근자에서는 널 병합 연산자(??)를 사용하여 _name 값이 널(null)일 때 "이름 없음"을 반환하도록 설정되어 있습니다.
Main 메서드에서는 Person 클래스를 사용하여 객체를 생성하고, Name 속성에 값을 할당하고 출력하는 과정을 보여주고 있습니다. 마지막으로 person2.Name에 널(null) 값을 할당하고 출력하면, 널 병합 연산자로 인해 "이름 없음"이 출력됩니다.
??= 구문
널 병합 할당 연산자(??=)는 C# 8.0 이상에서 도입된 연산자로, 변수가 널(null)일 경우에만 우측의 값을 할당하는 연산자입니다. 이 연산자를 사용하면 특정 변수가 널일 때만 값을 할당하고, 값이 이미 존재하는 경우에는 할당을 건너뛰게 됩니다.아래 예제는 ??= 연산자를 사용하여 변수가 널일 때만 기본값을 할당하는 방법을 보여줍니다.
class Program
{
static void Main(string[] args)
{
int? nullableNumber = null;
int defaultValue = 10;
// nullableNumber가 널일 경우 defaultValue를 할당합니다.
nullableNumber ??= defaultValue;
Console.WriteLine(nullableNumber); // 출력: 10
// 이미 값이 있는 경우에는 할당이 되지 않습니다.
nullableNumber ??= 20;
Console.WriteLine(nullableNumber); // 출력: 10 (기존 값 유지)
}
}
위의 코드에서 nullableNumber ??= defaultValue; 라인은 nullableNumber 변수가 널(null)인 경우에만 defaultValue 값을 할당합니다. 처음에 nullableNumber 변수는 널이므로 defaultValue인 10이 할당됩니다. 그 후에 nullableNumber ??= 20; 라인이 실행되지만 이미 nullableNumber 변수에는 값이 할당되어 있으므로 (nullableNumber이 10이 되었으므로) 할당이 되지 않고 기존의 값이 유지됩니다.
이처럼 ??= 연산자는 변수가 널일 때만 값을 할당하는 경우에 유용하게 사용될 수 있습니다.
지금까지 널 병합 연산자에 대해서 알아보았습니다. 이전 글의 연산자에 대해 글을 쓰다가 널 병합 연산자를 알게되면서 글을 쓰게 되었습니다. 널 병합 연산자를 알기 전까지는 Init() 합수를 만들어서 초기화 값들을 적었었는데, 앞으로는 널 병합 연산자를 자주 사용할 것 같습니다.
'C#' 카테고리의 다른 글
[C#] 함수의 종류 (0) | 2023.12.21 |
---|---|
[C#] 함수 (0) | 2023.12.20 |
[C#] 연산자 (0) | 2023.12.20 |
[C#] 데이터타입 (0) | 2023.12.19 |
[C#] 변수 (0) | 2023.12.19 |