Java의 isInstance()란 무엇인가?
Java의 java.lang.Class.isInstance() 메서드는 지정된 객체가 해당 Class가 나타내는 타입과 할당 호환(assignment-compatible) 관계인지, 즉 그 클래스의 인스턴스로 취급될 수 있는지 여부를 판별합니다. 런타임 시점에 객체의 실제 타입을 안전하게 검사할 수 있는 유용한 기능입니다.
C#에서 isInstance()에 해당하는 방법 3가지
1. Type.IsAssignableFrom() 메서드
C#에서 Java의 isInstance()와 가장 대응되는 기능은 Type.IsAssignableFrom()입니다. 이 메서드는 특정 타입의 인스턴스를 다른 타입 변수에 할당할 수 있는지 확인합니다.
typeof(DemoClass).IsAssignableFrom(ob.GetType())
2. is 연산자 — 가장 간단한 방법
실무에서는 is 연산자를 사용하는 것이 가장 직관적이고 간결합니다. 객체가 특정 클래스의 인스턴스인지 여부를 bool 값으로 반환합니다.
bool res = (ob is DemoClass);
참고로 C# 7.0 이상에서는 패턴 매칭과 함께 if (ob is DemoClass demo) 형태로 타입 검사와 캐스팅을 동시에 처리할 수도 있습니다.
3. Type.IsInstanceOfType() 메서드
Type.IsInstanceOfType()을 활용하면 동일한 결과를 얻을 수 있습니다. 이 메서드는 지정된 객체가 현재 Type의 인스턴스인지 검사하며, Java의 isInstance()와 동작 면에서 가장 유사합니다.
ob.GetType().IsInstanceOfType(otherOb)
정리
세 가지 방법 모두 런타임 타입 검사라는 동일한 목적을 수행하지만, 상황에 따라 적합한 도구가 다릅니다. 단순한 인스턴스 확인에는 is 연산자를, 타입 간 할당 가능 여부를 일반적으로 확인해야 하는 경우에는 IsAssignableFrom()을, Java 코드와의 대응 관계가 중요한 경우에는 IsInstanceOfType()을 사용하는 것이 좋습니다.