소프트웨어 개발 세계에서 null 참조는 꽤나 골치아픈 문제로, 개발자들 사이에서 악명 높은 "NullReferenceException"으로 이어질 수 있습니다. C#의 최신 버전에서 주목할 만한 발전 중 하나는 nullability 기능의 도입입니다.
Nullable을 활용해 Non-Nullable을 Nullable로 변경할 수 있습니다.
Nullable<T>를 활용하여 int를 null 참조가 가능하도록 만들었습니다.
Nullable<int> age = null;
int? age2 = null;
여기서 int?는 위에있는 Nullable<int>를 간략하게 작성할 수 있도록 해줍니다.
Nullable 참조타입
C#의 참조 타입은 null 값을 가질 수 있었고, 이는 의도하지 않은 null 참조를 역참조할 때 잠재적인 문제점으로 이어질 수 있었습니다. C# 8.0에서는 nullable 참조 타입이라는 기능이 도입되었고, 이를 통해 참조 타입이 nullable인지 아닌지를 명시적으로 표현할 수 있게 되었습니다.
Nullability의 역할
1. 컴파일 시간 검사
컴파일러는 정적 분석을 수행하여 가능한 null 참조 역참조를 감지하고, 잠재적인 런타임 오류를 컴파일 시간 경고로 전환한다.
2. 코드 명확성
non-nullable 변수를 선언함으로써 null 값이 예상되지 않음을 명확한 계약으로 표현하며, 이는 코드의 가독성과 유지보수성을 향상시킨다.
3. 도구 개선
IDE는 nullability 주석을 사용하여 더 나은 코드 완성, 리팩토링 및 분석을 제공하며, 개발자의 생산성을 더욱 향상시킨다.
Null - Conditional 연산자 (?)
var result = man?.Name;
이 코드는 man 객체가 null이 아닐 경우 man.Name을 반환하고, man이 null이라면 result는 null이 됩니다.
Null - Coalescing 연산자 (??)
int? nullableInt = null;
int result = nullableInt ?? 10;
Console.WriteLine(result);
int? nullableInt = null; : nullableInt는 int 타입의 널 가능 변수로, 현재 null로 초기화됩니다.
int result = nullableInt ?? 10; : 이 줄에서 nullableInt가 null이면 10이 result에 할당됩니다.
만약 nullableInt에 값이 있었다면 그 값이 result에 할당되었을 것입니다.
Console.WriteLine(result); : result의 값을 출력합니다. 이 경우 nullableInt가 null이므로 result는 10이 됩니다.
Null-Coalescing assignment 연산자 (??=)
string? named = null;
//원래의 방법
if (named == null)
{
named = "이름";
}
//??= 사용
named ??= "이름";
//출력
Console.WriteLine(named);
string? named = null; : named는 널 가능 문자열 변수로 초기값이 null입니다.
named ??= "이름"; : 이 줄에서는 named가 null일 경우 "이름"으로 할당합니다.
즉, named가 null이기 때문에 "이름"이 할당됩니다.
Console.WriteLine(named); : named의 값을 출력합니다.
이 경우 named는 이제 "이름"이므로 콘솔에 "이름"이 출력됩니다.
Null-Forgiving 연산자 (!)
string? nullableString = "안녕하세요";
string nonNullableString = nullableString!;
Console.WriteLine(nonNullableString);
string? nullableString = "안녕하세요"; : nullableString은 널 가능 문자열로 초기화됩니다.
string nonNullableString = nullableString!; : nullableString이 null이 아님을 단언하여 nonNullableString에 할당합니다.
만약 nullableString이 null이었다면, 런타임에서 예외가 발생합니다.
Console.WriteLine(nonNullableString); : nonNullableString의 값을 출력합니다.
이 경우 "안녕하세요"가 출력됩니다.
주의할 점 :
null 허용 연산자는 값이 null이 아니라고 확신하는 경우에만 드물게 사용해야 합니다.
'C# > 문법' 카테고리의 다른 글
| C# 문법 10 -- 데이터 형식 정리 2 (0) | 2024.11.30 |
|---|---|
| C# 문법 9 -- 데이터 형식 정리 (0) | 2024.11.29 |
| C# 문법 7 -- 구조체(Struct) (0) | 2024.11.27 |
| C# 문법 6 (0) | 2024.11.26 |
| C# 문법 5 (0) | 2024.11.25 |