C#에서는 자료형(Data Type)의 기본 값을 반환하는 default 연산자가 존재합니다.
C# 7.1부터는 컴파일러가 자료형을 유추하여 기본값을 할당하는 default 리터럴이 추가되었으며, 코드를 심플하게 작성할 수 있습니다.
이번 포스팅에서는 default 연산자와 리터럴에 대해 설명하며, 어디에 사용되는지 정리하였습니다.
참고로 default 연산자와 리터럴은 switch문에서 사용되는 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을 반환해야 하는 경우 혹은 자료형의 기본값으로 할당되었는지 체크해야 하는 경우 사용할 수 있습니다.
제네릭 메서드에서 null을 반환하는 방법은 이전에 포스팅하였으니 아래 글을 확인 부탁드립니다.
☞ [C#]제네릭 메서드(Generic Method)에서 널(Null) 반환 방법
자료형의 기본값으로 할당되었는지 체크하는 메서드를 구현하기 위해 using문에 제네릭(Generic) 네임스페이스를 추가합니다.
using System.Collections.Generic;
그리고 다음 메서드를 구현합니다.
bool InitCheck<T>(T value)
{
if (EqualityComparer<T>.Default.Equals(value, default(T)))
return true;
else
return false;
}
== 연산자를 사용할 경우 제네릭 유형 때문에 컴파일 에러가 발생합니다.
그렇기 때문에 제네릭 인수인 value와 제네릭 유형의 기본값을 비교하는 EqualityComparer<T>.Default.Equals 메서드를 사용합니다.
정리
- default 연산자는 자료형(Data Type)의 기본값을 반환합니다.
- default 리터럴은 값의 자료형(Data Type)을 유추하여 기본값을 반환합니다.
- == 연산자로 제네릭 유형의 값을 비교할 수 없습니다.
- EqualityComparer<T>.Default.Equals 메서드를 사용하여 제네릭 유형의 기본값을 비교할 수 있습니다.
'C#' 카테고리의 다른 글
[C#]제네릭 클래스(Generic Class) (0) | 2021.09.22 |
---|---|
[C#]자료형(DataType) 확인 방법(GetType, typeof) (0) | 2021.09.20 |
[C#]제네릭 메서드(Generic Method) 널(Null) 반환 방법 (0) | 2021.09.19 |
[C#]제네릭 메서드(Generic Method) (0) | 2021.09.19 |
[C#]컬렉션, 큐(Queue) 자료구조 (0) | 2021.09.11 |
댓글