C# 'is' 연산자란?
C#의 'is' 연산자는 객체의 런타임 타입이 특정 타입과 호환되는지 여부를 확인하는 데 사용됩니다. 즉, 해당 객체가 지정한 타입으로 안전하게 변환(캐스팅)될 수 있는지를 검사하고, 그 결과를 true 또는 false 불리언 값으로 반환합니다.
기본 문법
expr is type
여기서 expr은 검사할 표현식(expression)이며, type은 호환성을 확인하려는 타입의 이름입니다.
'is' 연산자 사용 예제
다음 예제는 'is' 연산자를 활용해 전달받은 객체가 어떤 클래스에 속하는지 확인하고, 조건에 따라 적절히 캐스팅하는 과정을 보여줍니다.
예제 코드
using System;
class One { }
class Two { }
public class Demo {
public static void Test(object obj) {
One x;
Two y;
if (obj is One) {
Console.WriteLine("Class One");
x = (One)obj;
} else if (obj is Two) {
Console.WriteLine("Class Two");
y = (Two)obj;
} else {
Console.WriteLine("None of the classes!");
}
}
public static void Main() {
One o1 = new One();
Two t1 = new Two();
Test(o1);
Test(t1);
Test("str");
Console.ReadKey();
}
}실행 결과
Class One Class Two None of the classes!
코드 설명
위 예제의 실행 흐름을 살펴보면 다음과 같습니다.
Test(o1) 호출 시 o1은 One 클래스의 인스턴스이므로 obj is One 조건이 참이 되어 "Class One"이 출력되고, 객체가 One 타입으로 캐스팅됩니다.
Test(t1) 호출 시 t1은 Two 클래스의 인스턴스이므로 "Class Two"가 출력됩니다.
Test("str") 호출 시 문자열은 One이나 Two 어느 쪽과도 호환되지 않으므로 "None of the classes!"가 출력됩니다.
패턴 매칭으로 더 간결하게 (C# 7.0 이상)
C# 7.0부터는 'is' 연산자에 패턴 매칭(pattern matching)을 사용할 수 있습니다. 타입 검사와 캐스팅을 한 번에 처리할 수 있어 코드가 훨씬 간결해집니다.
if (obj is One one) {
Console.WriteLine("Class One");
} else if (obj is Two two) {
Console.WriteLine("Class Two");
}이처럼 'is' 연산자는 타입 변환 전 안전성을 확보하는 데 필수적인 도구이며, 잘못된 캐스팅으로 인한 InvalidCastException 예외 발생을 사전에 방지할 수 있습니다.