C#

[C#]자료형(DataType) 확인 방법(GetType, typeof)

DevStory 2021. 9. 20.

C#에서 변수 또는 객체의 자료형을 확인하는 방법으로 GetType 메서드가 있습니다.

 

그리고 변수는 확인 불가능하지만, 객체의 자료형을 확인할 수 있는 typeof 연산자도 있습니다.

 

이번 포스팅에서는 GetType 메서드와 typeof 연산자에 대해 정리하였습니다.

 


GetType 메서드

GetType 메서드는 현재 인스턴스의 자료형을 반환합니다.

 

변수 또는 객체를 인수로 전달합니다.

namespace ConsoleApp1
{
    class Program
    {
        class Person
        {
            public string Name { get; set; }
        }

        struct Circle
        {
            public int x;
            public int y;
        }

        static void Main(string[] args)
        {
            // int
            int intVal = 0;
            Console.WriteLine(intVal.GetType().Name); // Int32

            // string
            string strVal = "";
            Console.WriteLine(strVal.GetType().Name); // String

            // struct
            Circle circle = default(Circle);
            Console.WriteLine(circle.GetType().Name); // Circle

            // Collection
            ArrayList arr = new ArrayList() {1, 2, 3 };
            Console.WriteLine(arr.GetType().Name); // ArrayList

            // Class
            Person personObj = new Person();
            Console.WriteLine(personObj.GetType().Name); // Person
        }
    }
}

GetType 메서드가 반환하는 자료형은 Name 프로퍼티로 확인할 수 있습니다.

 

만약, Name 프로퍼티를 생략하거나 또는 FullName 프로퍼티를 사용하는 경우 네임스페이스도 같이 출력합니다.

(Name 프로퍼티를 생략하면 System.Type 형태로 반환하며, FullName 프로퍼티를 사용하면 string 타입으로 반환합니다.)

 

위 코드에서 Name을 생략하는 경우 실행 결과는 다음 사진과 같습니다.

Int32, String, ArrayList는 .NET FrameWork에 존재하는 자료형이므로 System 네임스페이스에 속합니다.

 

Circle 구조체와 Person 클래스는 ConsoleApp1 네임스페이스에서 제가 구현한 구조체와 클래스이므로 ConsoleApp1 네임스페이스에 속합니다.

 

그리고 object 타입은 할당된 값에 따라 자동으로 형 변환이 되는데, 다음 코드처럼 숫자를 할당했다가 문자열을 할당하는 경우 변환된 타입을 확인할 수 있습니다.

object objVal = 1000;

Console.WriteLine(objVal.GetType().Name); // Int32

objVal = "TEST";

Console.WriteLine(objVal.GetType().Name); // String
반응형

typeof 연산자

typeof 연산자는 자료형을 전달하여 System.Type 형태로 반환합니다.

 

GetType 메서드와 달리 변수와 객체를 전달할 수 없습니다.

namespace ConsoleApp1
{
    class Program
    {
        class Person
        {
            public string Name { get; set; }
        }

        struct Circle
        {
            public int x;
            public int y;
        }

        static void Main(string[] args)
        {
            // int
            Console.WriteLine(typeof(int).Name); // Int32

            // string
            Console.WriteLine(typeof(string).Name); // String

            // struct
            Console.WriteLine(typeof(Circle).Name); // Circle

            // Collection
            Console.WriteLine(typeof(ArrayList).Name); // ArrayList

            // Class
            Console.WriteLine(typeof(Person).Name); // Person
        }
    }
}

그리고 GetType 메서드와 공통사항인데, Name 프로퍼티를 생략하면 System.Type 형태로 반환하고 FullName 프로퍼티를 사용하면 string 타입으로 반환합니다.


정리

GetType

  • 메서드입니다.
  • 객체 또는 변수를 전달하여, 타입을 반환합니다.

 

typeof

  • 연산자입니다.
  • 자료형을 전달하여 System.Type 형태로 반환합니다.
반응형

댓글