C#

[C#] Nullable/널 조건부 연산자/널 병합 연산자

ryureeru 2023. 12. 20. 12:14

Nullable?

Null(비어 있는) + able(~될 수 있는) -> 비어 있는 상태가 될 수 있는 형식

 

int? a = null;
float? b = null;
double? c = null;

int d; // 컴파일 에러

 

 

 

모든 Nullable 형식은 HasValue와 Value 두 가지의 속성을 가집니다.

int? a = null;
Console.WriteLine(a.HasValue); // null이므로 False

a = 37;
Console.WriteLine(a.HasValue); // True
Console.WriteLine(a.Value); // 37

 

 

 

 

 

널 조건부 연산자?

?. 기호를 사용. 객체의 멤버에 접근하기 전에 해당 객체가 null인지를 검사하여 그 결과가 참이면 null을 반환, 거짓이면 . 뒤에 지정된 멤버를 반환합니다.

 

class Foo
{
	public int member;
}

Foo foo = null;

int? bar;
bar = foo?.memebr; // null이 아니면 memebr 필드에 접근

 

 

 

이외에도 배열과 같은 컬렉션 객체의 참조에 사용하디 위한 ?[] 기호가 있습니다.

ArrayList a = null;
a?.Add("야구"); // a?.이 null을 반환하므로 Add() 메소드는 호출x
a?.Add("축구");
WriteLine($"{a?.Count}"); // a?.이 null을 반환하므로 출력x

a = new ArrayList(); // null이 아닌 상태
a?.Add("야구");
a?.Add("축구");
WriteLine($"{a?.Count}"); // 2
WriteLine($"{a?[0]}"); // 야구
WriteLine($"{a?[1]}"); // 축구

 

 

 

 

 

널 병합 연산자

?? 기호를 사용. 널 조건부 연산자처럼 변수/객체의 null 검사를 간결하게 만들어주는 역할

 

int? a = null;
Console.WriteLine($"{a ?? 0}"); // a는 null이므로 0 출력

a = 99;
Console.WriteLine($"{a ?? 0}"); // a는 null이 아니므로 99 출력

'C#' 카테고리의 다른 글

[C#] this()/base()/상속/오버라이딩  (0) 2023.12.20