VisualStudio/C#

[C#] nameof()와 default(T)

usingsystem 2023. 1. 5. 09:22
728x90

nameof

nameof는 변수, 형식, 또는 멤버의 이름을 문자열로 반환합니다. 이는 하드코딩된 문자열을 대체하여 유지보수성을 높이는 데 유용합니다.

  1. 컴파일 시 이름을 확인하므로, 오타나 잘못된 참조를 방지할 수 있습니다.
  2. 코드 리팩토링 시 변수 이름이 변경되면, nameof도 자동으로 업데이트됩니다.
  3. 주로 로깅, 예외 메시지, 또는 속성 이름을 출력하는 데 사용됩니다.
using System;

namespace NameofExample
{
    class Program
    {
        // 속성 정의
        public string NameOfTest { get; set; } = "Initial Value";

        static void Main(string[] args)
        {
            // 변수 선언
            string nameofTest = "SampleValue";

            // nameof 사용
            Console.WriteLine(nameof(nameofTest)); // nameofTest 출력
            Console.WriteLine(nameof(NameOfTest)); // NameOfTest 출력

            // 클래스 속성 사용 예제
            var program = new Program();
            Console.WriteLine($"속성 이름: {nameof(program.NameOfTest)}, 값: {program.NameOfTest}");
        }
    }
}

default

default는 형식의 기본값을 반환합니다. 값 형식참조 형식에 따라 반환되는 값이 다릅니다.

기본값의 차이

  1. 값 형식 (struct): 기본값은 0, false, 또는 초기화되지 않은 상태의 값입니다.
  2. 참조 형식 (class): 기본값은 null입니다.

주요 활용

  • 제네릭 타입에서 기본값을 반환할 때 유용합니다.
  • 초기화되지 않은 상태를 명시적으로 표현할 수 있습니다.
using System;

namespace DefaultExample
{
    class Program
    {
        // 제네릭 메서드: 특정 조건에 따라 기본값 반환
        public static T GetDefaultValue<T>(bool check)
        {
            if (!check)
                return default(T); // 형식 T의 기본값 반환

            // 예제에서는 형식 T가 숫자인 경우 42 반환
            return (T)Convert.ChangeType(42, typeof(T));
        }

        static void Main(string[] args)
        {
            // int 형식 기본값
            int defaultInt = default(int); // 0
            Console.WriteLine($"int 기본값: {defaultInt}");

            // string 형식 기본값
            string defaultString = default(string); // null
            Console.WriteLine($"string 기본값: {(defaultString == null ? "null" : defaultString)}");

            // bool 형식 기본값
            bool defaultBool = default(bool); // false
            Console.WriteLine($"bool 기본값: {defaultBool}");

            // 제네릭 메서드 테스트
            int result1 = GetDefaultValue<int>(false); // false인 경우 기본값 반환
            Console.WriteLine($"결과 (check=false): {result1}"); // 0

            int result2 = GetDefaultValue<int>(true); // true인 경우 42 반환
            Console.WriteLine($"결과 (check=true): {result2}"); // 42
        }
    }
}
728x90