C# 7.1부터는 컴파일러가 자료형을 유추하여 기본값을 할당하는 default 리터럴이 추가되었으며, 코드를 심플하게 작성할 수 있다.
default 연산자, 리터럴
default 연산자는 괄호 안에 자료형을 명시해준다.
int num = default(int);
Console.WriteLine(num); // 0
default 리터럴은 괄호를 생략할 수 있다.
컴파일러가 변수 num의 자료형을 유추하여 기본값을 할당한다.
int num = default;
Console.WriteLine(num); // 0
아래 표는 각 타입의 기본 값이다.
자료형(Data Type) | 기본값 |
참조 형식 | null |
정수 숫자 유형 | 0 |
부동 소수점 숫자 유형 | 0 |
bool | false |
char | '\0' |
enum | 0 |
struct | 값 형식 필드를 기본값으로 설정하고 참조 형식 필드는 null로 설정한다. |
Null 허용 값 형식 | null |
default 연산자와 리터럴은 위 표에 있는 자료형뿐만 아니라 DateTime과 Guid 타입의 기본값도 반환한다.
Console.WriteLine(default(DateTime)); // 0001-01-01 오전 12:00:00
Console.WriteLine(default(Guid)); // 0000000-0000-0000-0000-000000000000
default 응용 및 사용
이러한 default 연산자와 리터럴은 주로 제네릭(Generic)에서 자주 사용된다. 제네릭 메서드에서 null을 반환해야 하는 경우 혹은 자료형의 기본값으로 할당되었는지 체크해야 하는 경우 사용할 수 있다.
자료형의 기본값으로 할당되었는지 체크하는 메서드를 구현하기 위해 using문에 제네릭(Generic) 네임스페이스를 추가한다.
bool InitCheck<T>(T value)
{
if (EqualityComparer<T>.Default.Equals(value, default(T)))
return true;
else
return false;
}
== 연산자를 사용할 경우 제네릭 유형 때문에 컴파일 에러가 발생한다.
그렇기 때문에 제네릭 인수인 value와 제네릭 유형의 기본값을 비교하는 EqualityComparer<T>.Default.Equals 메서드를 사용한다.
'프로그래밍 언어 > C#' 카테고리의 다른 글
[C#] default와 new() 제약조건 사용하기 (0) | 2023.08.23 |
---|---|
[C#] 제네릭 메서드(Generic Method) 널(Null) 반환 방법 (0) | 2023.08.23 |
[C#] 리플렉션 (Reflection) 예시 (0) | 2023.08.23 |
[C#] var 키워드 (0) | 2023.08.11 |
[C#] 참조에 의한 매개변수 전달 (ref, out) (0) | 2023.08.11 |