프로그래밍 언어/C#

[C#] 자료형(Data Type)의 기본 값(default) 연산자

ShovelingLife 2023. 8. 23. 10:22

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#]자료형(Data Type)의 기본 값(default) 연산자 (tistory.com)