C#

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

DevStory 2021. 9. 20.

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 연산자와 리터럴은 위 표에 있는 자료형뿐만 아니라 DateTimeGuid 타입의 기본값도 반환합니다.

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 메서드를 사용하여 제네릭 유형의 기본값을 비교할 수 있습니다.
반응형

댓글