C# 7.1부터 변수를 초기화할 때 default를 사용할 수 있습니다. default를 사용하면 해당 자료형에 맞게 기본값이 할당됩니다. 따라서 변수 초기화 시 default를 사용하면 매우 편리합니다. 이번 포스팅에서는 이런 편리한 default를 이용하여 변수를 초기화하는 방법에 대해서 정리했습니다.
형식에 따른 기본값
C#은 자료형마다 각각의 기본값이 있습니다. 아래표에 자료형 별 기본값을 정리해 놨습니다.
형식 | 기본값 |
참조 형식 | null |
숫자 값 형식 | 0 |
bool | false |
char | '\0' |
enum | 식(E)0 값이며 여기서 E는 열거형 식별자입니다. |
struct | 모든 값 형식 필드를 기본값으로 설정하고 모든 참조 형식 필드를 null로 설정하여 생성한 값 |
nullable 형식 | HasValue 속성은 false이고 Value 속성은 정의되지 않은 인스턴스 |
여기서 string의 경우 착각하기 쉬운데 string의 기본값은 ""(공백문자열)이 아닙니다. string은 이전에도 정리했듯이 참조형 변수입니다. 따라서 default로 초기화 시 위 표에 정리해 놓은 것처럼 null로 초기화됩니다.
default를 이용한 초기화
default는 특히 제네릭 타입의 초기화에 유용합니다. 제네릭 타입을 초기화할 때는 그 타입을 미리 알아야 하는 번거로움이 있습니다. 하지만 default를 사용하면 자동으로 형식에 맞게 초기화를 해주기 때문에 이런 수고로움을 덜어줍니다.
다음은 default를 이용하여 변수를 초기화하고 사용하는 예제입니다.
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Runtime.Remoting.Channels;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace Default_exam
{
internal class Program
{
enum E { Red, Green, Blue };
public class MyList<T>
{
private class Node
{
public T data;
public Node next;
}
private Node head = default;
public void AddNode(T node)
{
Node newNode = new Node();
newNode.next = head;
newNode.data = node;
head = newNode;
}
public T GetLast()
{
T temp = default(T);
Node current = head;
while(current != null)
{
temp = current.data;
current = current.next;
}
return temp;
}
}
static void Main(string[] args)
{
int a = default; //정수형 default로 초기화
string s = default; //문자열 default로 초기화
Console.WriteLine($"a = {a}"); //정수형 초기값 출력
Console.WriteLine($"s = {s}"); //문자열 초기값 출력
Console.WriteLine($"E = {default(E)}"); //열거형을 default로 초기화한 후 출력
Console.WriteLine($"E = {(E)0}"); //열거형 초기값 출력
MyList<int> iList = new MyList<int>();
Console.WriteLine($"iList : {iList.GetLast()}");
MyList<string> sList = new MyList<string>();
Console.WriteLine($"sList : {sList.GetLast()}");
}
}
}
결과
a = 0
s =
E = Red
E = Red
iList : 0
sList :
위 결과에서 s와 sList는 null값이기 때문에 콘솔 출력 시 여백으로 나타납니다.
[Review]
"초보자를 위한 C# 200제(2판)" / 저자 : 강병익
'Program Language > C#' 카테고리의 다른 글
Part1. C# 첫발 내딛기(31. object 타입) (16) | 2023.01.30 |
---|---|
Part1. C# 첫발 내딛기(30. Nullable Type) (8) | 2023.01.29 |
Part1. C# 첫발 내딛기(28. Null 조건 연산자 '?') (4) | 2023.01.24 |
Part1. C# 첫발 내딛기(27. 값 형식과 참조 형식) (12) | 2023.01.22 |
Part1. C# 첫발 내딛기(26. const 와 readonly) (14) | 2023.01.20 |
댓글