C#의 Type.GetTypeFromHandle() 메서드는 지정된 타입 핸들(RuntimeTypeHandle)이 참조하는 Type 객체를 반환하는 정적 메서드입니다. 리플렉션 작업 중 타입 핸들만 가지고 있을 때 원래의 타입 정보를 다시 얻어야 하는 경우에 유용하게 사용됩니다.
메서드 구문 (Syntax)
이 메서드의 기본 구문은 다음과 같습니다.
public static Type GetTypeFromHandle(RuntimeTypeHandle handle);
매개변수 handle은 특정 타입을 참조하는 RuntimeTypeHandle 객체입니다. 이 핸들은 일반적으로 Type.GetTypeHandle() 메서드를 통해 얻을 수 있으며, 두 메서드는 서로 반대되는 역할을 수행합니다.
주요 특징
- 타입 핸들은 가볍고 빠르게 비교할 수 있는 런타임 구조체입니다.
- 핸들이 유효하지 않으면
null이 아닌 예외가 발생할 수 있으므로 주의해야 합니다. - 반환된
Type객체를 통해 속성, 메서드, 특성(Attributes) 등 다양한 타입 정보에 접근할 수 있습니다.
예제 1: short 타입 조회하기
다음은 Type.GetTypeFromHandle() 메서드를 실제로 구현한 첫 번째 예제입니다.
using System;
public class Demo {
public static void Main() {
Type type1 = typeof(short);
RuntimeTypeHandle typeHandle = Type.GetTypeHandle(type1);
Type type = Type.GetTypeFromHandle(typeHandle);
Console.WriteLine("Attributes = " + type.Attributes);
}
}실행 결과
위 코드를 실행하면 다음과 같은 출력이 나타납니다.
Attributes = AutoLayout, AnsiClass, Class, Serializable, BeforeFieldInit
출력 결과에서 확인할 수 있듯이, short 타입의 특성 정보가 표시됩니다. 각 특성의 의미는 다음과 같습니다.
- AutoLayout: CLR이 필드 배치를 자동으로 결정합니다.
- AnsiClass: 문자열 형식이 ANSI로 정의됩니다.
- Serializable: 직렬화가 가능한 타입입니다.
- BeforeFieldInit: 정적 필드 초기화 시점이 유연하게 지정됩니다.
예제 2: System.Type 타입 조회하기
이번에는 System.Type 자체에 대한 핸들을 사용하는 또 다른 예제를 살펴보겠습니다.
using System;
public class Demo {
public static void Main() {
Type type1 = typeof(System.Type);
RuntimeTypeHandle typeHandle = Type.GetTypeHandle(type1);
Type type = Type.GetTypeFromHandle(typeHandle);
Console.WriteLine("Attributes = " + type.Attributes);
}
}실행 결과
이 코드 역시 동일한 방식으로 타입 특성을 출력합니다.
Attributes = AutoLayout, AnsiClass, Class, Serializable, BeforeFieldInit
정리
Type.GetTypeFromHandle() 메서드는 Type.GetTypeHandle()과 함께 사용되어 타입 핸들과 Type 객체 간의 상호 변환을 지원합니다. 성능이 중요한 코드에서 타입을 식별해야 하거나, 핸들 기반 API와 연동해야 하는 상황에서 활용도가 높습니다. 리플렉션을 다룰 때 이 두 메서드의 관계를 이해해 두면 도움이 됩니다.