C#의 'is' 연산자는 객체의 런타임 타입이 특정 타입과 호환되는지 여부를 검사하는 데 사용됩니다. 즉, 해당 객체가 지정된 타입으로 변환 가능한지 확인하고, 그 결과를 true 또는 false로 반환합니다.
is 연산자 기본 문법
expr is type
여기서 각 구성 요소는 다음과 같습니다.
- expr: 타입을 검사할 대상 표현식(객체)
- type: 호환 여부를 확인할 타입의 이름
is 연산자는 조건이 성립하면 true, 그렇지 않으면 false를 반환하며, 주로 if 문과 함께 사용해 객체의 실제 타입을 안전하게 판별한 뒤 형 변환(casting)을 수행하는 용도로 활용됩니다.
C# 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!
패턴 매칭을 활용한 더 간결한 방법 (C# 7.0 이상)
C# 7.0부터는 is 연산자와 패턴 매칭(pattern matching)을 함께 사용하면 타입 검사와 형 변환을 한 번에 처리할 수 있어 코드가 훨씬 간결해집니다.
if (obj is One one) {
Console.WriteLine($"Class One: {one}");
} else if (obj is Two two) {
Console.WriteLine($"Class Two: {two}");
} else {
Console.WriteLine("None of the classes!");
}이처럼 obj is One one 형태로 작성하면 타입 검사가 통과할 경우 자동으로 One 타입 변수에 할당되므로, 별도의 명시적 캐스팅 없이 바로 사용할 수 있습니다.
정리
- is 연산자는 객체의 런타임 타입과 지정된 타입의 호환 여부를 확인합니다.
- 반환값은 불리언(
true/false)이며, 잘못된 캐스팅으로 인한 예외를 사전에 방지할 수 있습니다. - C# 7.0 이상에서는 패턴 매칭과 결합해 타입 검사와 변수 선언을 동시에 처리할 수 있습니다.