본문 바로가기
Program Language/C#

Part1. C# 첫발 내딛기(29. default를 이용한 변수 초기화)

by 토담이아빠 2023. 1. 26.

default를 이용한 변수 초기화

 

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판)" / 저자 : 강병익

댓글