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()은 항상 실제 런타임 인스턴스의 타입을 반환한다는 점을 기억하시기 바랍니다.