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

C# 'is' 연산자란? 개념부터 사용 예제까지 한눈에 정리

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 이상에서는 패턴 매칭과 결합해 타입 검사와 변수 선언을 동시에 처리할 수 있습니다.