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

C#의 typeof와 GetType 완벽 정리: 차이점과 활용법

C#에서 타입 정보를 다루는 방법

C# 프로그래밍에서 객체의 타입 정보를 확인하거나 활용해야 하는 경우가 자주 있습니다. 이때 사용되는 대표적인 도구가 바로 typeof 연산자, GetType() 메서드, 그리고 is 키워드입니다. 각각의 특징과 차이점을 살펴보겠습니다.

typeof 연산자란?

typeof는 컴파일 시점에 타입 이름을 인수로 받아 해당 타입의 Type 객체를 반환하는 연산자입니다. 클래스, 구조체, 열거형 등 특정 타입 자체에 대한 메타데이터가 필요할 때 주로 사용됩니다.

GetType() 메서드란?

GetType()은 모든 객체가 상속받는 Object 클래스에 정의된 메서드로, 현재 인스턴스(객체)의 런타임 타입을 반환합니다. 즉, 실제 생성된 객체의 타입을 실행 시점에 확인할 수 있습니다.

typeof vs GetType() 핵심 차이: typeof는 타입 이름이 필요하고, GetType()은 객체 인스턴스가 필요합니다.

is 키워드란?

is 키워드는 특정 객체가 지정한 타입으로 캐스팅(형 변환) 가능한지 검사할 때 사용됩니다. 연산 결과는 true 또는 false인 불리언(Boolean) 값으로 반환되며, 조건문과 함께 안전한 타입 검사를 수행할 수 있습니다.

예제 코드

class Demo {
}
class Program {
    static void Main() {
        var demo = new Demo();
        Console.WriteLine($"typeof {typeof(Demo)}");
        Type tp = demo.GetType();
        Console.WriteLine($"GetType {tp}");
        if (demo is Demo) {
            System.Console.WriteLine($"is keyword check true");
        }
        Console.ReadLine();
    }
}

실행 결과

typeof ConsoleApp.Demo
GetType ConsoleApp.Demo
is keyword check true

정리

- typeof(T): 컴파일 시점에 타입 T의 Type 객체를 반환
- instance.GetType(): 런타임에 해당 인스턴스의 실제 타입을 반환
- obj is T: 객체가 T 타입으로 변환 가능한지 불리언 값으로 판단

세 가지 기능은 모두 C#의 리플렉션(Reflection) 및 타입 안정성 확보에 필수적인 요소이므로, 상황에 맞게 적절히 활용하면 더욱 견고한 코드를 작성할 수 있습니다.