typeof()란?
typeof()는 C#에서 제공하는 연산자로, 지정한 타입 자체의 Type 객체를 반환합니다. 이 연산자는 컴파일 타임에 평가되기 때문에, 특정 타입이 코드 작성 시점에 이미 확정되어 있을 때 사용합니다.
예를 들어, byte 타입을 조회하면 다음과 같이 사용합니다.
typeof(byte)
typeof() 예제
아래 예제는 int와 byte 타입의 전체 이름을 출력합니다.
using System;
class Program {
static void Main() {
Console.WriteLine(typeof(int));
Console.WriteLine(typeof(byte));
}
}출력 결과
System.Int32 System.Byte
GetType()이란?
GetType()은 모든 객체가 상속받는 System.Object 클래스의 메서드로, 런타임에 현재 인스턴스의 실제 타입을 반환합니다. 즉, 변수가 어떤 구체적인 타입으로 생성되었는지 실행 중에 동적으로 확인할 수 있습니다.
객체의 타입을 얻는 기본 문법은 다음과 같습니다.
Type tp = value.GetType();
아래처럼 얻어온 타입을 typeof() 결과와 비교하여 해당 값이 정수형인지 검사할 수 있습니다.
if (tp.Equals(typeof(int)))
Console.WriteLine("{0} is an integer data type.", value);GetType() 예제
다음 예제에서는 서로 다른 타입의 값들을 배열에 담고, 각 값의 실제 타입을 GetType()으로 확인합니다.
using System;
class Program {
public static void Main() {
object[] values = { (int) 100, (long) 17111 };
foreach (var value in values) {
Type tp = value.GetType();
if (tp.Equals(typeof(int)))
Console.WriteLine("{0} is an integer data type.", value);
else
Console.WriteLine("'{0}' is not an int data type.", value);
}
}
}출력 결과
100 is an integer data type. '17111' is not an int data type.
typeof()와 GetType()의 핵심 차이
두 방법 모두 Type 객체를 반환하지만, 사용 목적과 평가 시점이 다릅니다.
- typeof(): 컴파일 타임에 평가되며, 타입 이름을 직접 인자로 받습니다. 특정 타입과 비교하거나 리플렉션에 활용할 때 적합합니다.
- GetType(): 런타임에 평가되며, 객체 인스턴스에서 호출됩니다. 다형성(polymorphism) 환경에서 변수의 선언 타입이 아닌 실제 인스턴스 타입을 알려줍니다.
따라서 타입이 코드에 명시적으로 존재한다면 typeof()를, 실행 중인 객체의 실제 타입을 알아야 한다면 GetType()을 사용하는 것이 올바른 선택입니다.