개발꿈나무
[C# 교과서] 12. C# 활용(6) - 널(null) 다루기 본문
반응형
널(null) 다루기
- 프로그래밍 언어에서 널(Null, NULL, null, nil)은 아무것도 없는 상태를 나타낸다.
- 개체가 아무것도 참조하지 않는 것을 null 참조라고 한다.
null 값
- 아무런 값이 없음
- 참조형 변수에 아무런 값을 설정하지 않음
- 알려지지 않은 값으로 아무 의미가 없거나 모르는 값, 값이 없음을 의미
- 변수가 아무런 값도 가리키고 있지 않음
- 변수가 이름만 만들고 아무런 참조도 하지않음
- 개체가 만들어지고 아무런 값도 참조하지 않음을 나타냄
- 영어 단어로는 undefined
- 빈 값(Empty, "")과는 다름
null 가능 형식: Nullable<T> 형식
기본 제공 형식을 null이 가능한 형식으로 변경하려면 Nullable<T> 제네릭 형식을 사용한다.
Nullable 형식을 줄임 표현하는 방법은 데이터 형식 뒤에 ?(물음표) 기호를 붙이는 것이다. EX) bool?, int?
bool과 Nullable<bool>의 차이는 다음과 같다.
- bool 형식은 true와 false를 갖는다.
- Nullable<bool> 형식은 true, false, null을 갖는다.
Nullable<T> 형식이 제공하는 주요 멤버
- HasValue 속성: 값이 있으면 true, null 값이면 false를 반환
- Value 속성: 값 반환
- GetValueOrDefault: 값 또는 기본값 반환
null 값을 다루는 연산자
??연산자(null 병합 연산자): 왼쪽 항이 null이 아니면 해당 값 반환, 그렇지 않으면 오른쪽 값 반환
using System;
class NullCoalescing
{
static void Main()
{
var result = "";
var message = "";
message = null;
result = message ?? "기본값";
Console.WriteLine(result); // 기본값
message = "있는값";
result = message ?? "기본값";
Console.WriteLine(result); // 있는값
}
}
null 가능 형식에 null 병합 연산자 사용하기
using System;
class NullCoalescingOperator
{
static void Main()
{
int? value = null; // null 가능 형식에 null로 초기화
int defaultValue = value ?? -1; // value가 null이면 -1 대입
Console.WriteLine(defaultValue); // -1
}
}
null 병합 연산자와 default 키워드
using System;
class NullableTypeCheck
{
static void Main()
{
int? x = null;
int y = x ?? 100; // x가 null이면 100으로 초기화
int z = x ?? default(int); // x가 null이면 정수형의 기본값인 0으로 초기화
Console.WriteLine($"y: {y}, z: {z}"); // y: 100, z: 0
}
}
null 조건부 연산자(?.): 변수 값이 null이면 null 값 반환, null이 아니면 ?. 연산자 뒤의 속성 또는 메서드 실행
using System;
class NullConditional
{
static void Main()
{
int? len;
string message;
message = null;
len = message?.Length; // null
if (len == null)
{
Console.WriteLine("[1] message는 null입니다.");
}
message = "안녕";
len = message?.Length; // 2
if (len != null)
{
Console.WriteLine($"[2] message는 {len}자입니다.");
}
}
}
// [1] message는 null입니다.
// [2] message는 2자입니다.
null 조건부 연산자와 null 병합 연산자 함께 사용하기
using System;
using System.Collections.Generic;
class NullCoalescingWithCollection
{
static void Main()
{
int num;
List<string> list;
//[1] 컬렉션 리스트가 null이면 Count를 읽을 수 없기에 0으로 초기화
list = null;
num = list?.Count ?? 0; // null이면 0 반환, null이 아니면 list.Count 반환
Console.WriteLine($"[1] 컬렉션 카운트: {num}"); // 0
//[2] 컬렉션 리스트가 null이 아니면 Count 속성의 값을 사용
list = new List<string>(); list.Add("또 만나요.");
num = list?.Count ?? 0; // null이 아니기 때문에 list.Count 반환
Console.WriteLine($"[2] 컬렉션 카운트: {num}"); // 1
}
}
/*
[1] 컬렉션 카운트: 0
[2] 컬렉션 카운트: 1
*/
?. 연산자의 결괏값이 null이면 null 대신에 ?? 연산자를 사용하여 새로운 값으로 초기화한다.
null 관련 연산자 2개를 함꼐 사용하는 list?.Count ?? 0 코드는 복잡해 보여도 사용성이 높기 때문에 익혀두는 것이 좋다.
<Reference>
반응형
'C# 기초' 카테고리의 다른 글
[C# 교과서] 14. C# 활용(8) - 알고리즘과 절차 지향 프로그래밍 (0) | 2022.01.19 |
---|---|
[C# 교과서] 13. C# 활용(7) - LINQ (0) | 2022.01.18 |
[C# 교과서] 10. C# 활용(4) - 컬렉션 사용하기 (0) | 2022.01.17 |
[C# 교과서] 9. C# 활용(3) - 예외 처리하기 (0) | 2022.01.17 |
[C# 교과서] 8. C# 활용(2) - 문자열 다루기 (0) | 2022.01.14 |
Comments