Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# Object.GetType() 메서드 완벽 정리: 문법과 예제로 쉽게 이해하기

C# Object.GetType() 메서드란?

C#에서 Object.GetType() 메서드는 현재 인스턴스의 정확한 런타임 타입(Type)을 반환하는 데 사용됩니다. 모든 클래스의 최상위 기반 클래스인 Object에서 상속되기 때문에, 어떤 객체든 이 메서드를 호출하여 자신이 실제로 어떤 타입인지 확인할 수 있습니다.

반환되는 값은 System.Type 객체이며, 이를 통해 해당 타입의 이름, 네임스페이스, 해시 코드 등 다양한 메타데이터 정보에 접근할 수 있습니다.

문법(Syntax)

public Type GetType();

매개변수는 없으며, 현재 인스턴스의 런타임 타입을 나타내는 Type 객체를 반환합니다.

예제 1: 기본 객체와 문자열의 타입 확인

using System;
public class Demo {
    public static void Main() {
        Object ob = new Object();
        String str = "Jim";
        Type type1 = ob.GetType();
        Type type2 = str.GetType();
        Console.WriteLine("Type = "+type1);
        Console.WriteLine("Type = "+type2);
        Console.WriteLine("\nHash Code = "+type1.GetHashCode());
        Console.WriteLine("Hash Code = "+type2.GetHashCode());
    }
}

실행 결과

Type = System.Object
Type = System.String
Hash Code = 30015890
Hash Code = 21083178

위 예제를 보면 Object 인스턴스는 System.Object 타입으로, 문자열은 System.String 타입으로 각각 올바르게 식별된 것을 확인할 수 있습니다. 또한 각 Type 객체의 해시 코드도 함께 출력했습니다.

예제 2: 사용자 정의 구조체(Struct)에서 활용

using System;
public struct Value {
    private int v1;
    private int v2;
    private int v3;
    public Value(int v1, int v2, int v3) {
        this.v1 = v1;
        this.v2 = v2;
        this.v3 = v3;
    }
    public override int GetHashCode() {
        return Tuple.Create(v1, v2, v3).GetHashCode();
    }
}
public class Demo {
    public static void Main() {
        Value v = new Value(1, 7, 12);
        Console.WriteLine(v.GetHashCode());
        Console.WriteLine(v.GetType());
        v = new Value(12, 8, 7);
        Console.WriteLine(v.GetHashCode());
        v = new Value(8, 7, 12);
        Console.WriteLine(v.GetHashCode());
    }
}

실행 결과

1258
Value
12803
8931

두 번째 예제에서는 세 개의 정수 필드를 가진 사용자 정의 구조체를 만들고, GetHashCode()를 재정의하여 필드 값을 기반으로 한 해시 코드를 생성했습니다. GetType() 메서드가 구조체 이름인 Value를 정확히 반환하는 것도 확인할 수 있습니다.

정리

Object.GetType() 메서드는 다음과 같은 상황에서 유용하게 활용됩니다.

  • 런타임에 객체의 실제 타입을 확인해야 할 때
  • 리플렉션(Reflection) 작업의 시작점으로 타입 정보가 필요할 때
  • 디버깅 과정에서 객체의 정확한 타입을 파악하고자 할 때

참고로 컴파일 타임에는 변수가 특정 타입으로 선언되어 있어도, GetType()은 항상 실제 런타임 인스턴스의 타입을 반환한다는 점을 기억하시기 바랍니다.