1 minute read

개요


C#에서 클래스 간 형변환을 수행할 때 is와 as 키워드를 사용하여 안전한 변환을 수행할 수 있습니다. is 연산자는 특정 개체가 지정된 형식과 호환되는지 확인하는 데 사용되며, as 연산자는 형 변환을 수행하지만 변환이 실패하면 예외 대신 null을 반환합니다.

is 연산자


  • is 연산자는 객체가 특정 클래스 또는 인터페이스의 인스턴스인지 확인하는 데 사용됩니다.
  • 변환 가능 여부만 검사하며 실제 변환은 수행하지 않습니다.
  • 결과는 true 또는 false로 반환됩니다.

샘플 코드


using System;

class Animal { }
class Dog : Animal { }

class Program
{
    static void Main()
    {
        Animal myAnimal = new Dog();
        
        if (myAnimal is Dog)
        {
            Console.WriteLine("myAnimal은 Dog 형식입니다.");
        }
        else
        {
            Console.WriteLine("myAnimal은 Dog 형식이 아닙니다.");
        }
    }
}

[출력]

myAnimal은 Dog 형식입니다.



as 연산자


  • as 연산자는 형 변환을 수행하지만 변환이 실패하면 null을 반환합니다.
  • is 연산자와 달리 실제 형 변환이 일어납니다.
  • InvalidCastException이 발생하지 않기 때문에 안전한 형 변환이 가능합니다. 단, 값 형식(struct)에는 사용할 수 없습니다.

샘플 코드


using System;

class Animal { }
class Dog : Animal { }
class Cat : Animal { }

class Program
{
    static void Main()
    {
        Animal myAnimal = new Dog();
        Dog myDog = myAnimal as Dog;
        Cat myCat = myAnimal as Cat;
        
        if (myDog != null)
        {
            Console.WriteLine("myAnimal은 Dog로 변환되었습니다.");
        }
        else
        {
            Console.WriteLine("myAnimal은 Dog가 아닙니다.");
        }

        if (myCat != null)
        {
            Console.WriteLine("myAnimal은 Cat로 변환되었습니다.");
        }
        else
        {
            Console.WriteLine("myAnimal은 Cat가 아닙니다.");
        }
    }
}

[출력]

myAnimal은 Dog로 변환되었습니다.
myAnimal은 Cat가 아닙니다.


is와 as 비교


Image

실제 업무에서 사용


is를 사용하여 인터페이스를 구현하는지 확인하고, 변환 후 Speak() 메서드를 호출합니다. as는 명확한 다운캐스팅이 필요할 때 사용됩니다.

using System;

interface IAnimal
{
    void Speak();
}

class Dog : IAnimal
{
    public void Speak() => Console.WriteLine("멍멍!");
}

class Program
{
    static void MakeSound(object obj)
    {
        if (obj is IAnimal animal)
        {
            animal.Speak();
        }
        else
        {
            Console.WriteLine("이 객체는 동물이 아닙니다.");
        }
    }
    
    static void Main()
    {
        object myDog = new Dog();
        MakeSound(myDog);  // 멍멍!
        MakeSound("Not an animal");  // 이 객체는 동물이 아닙니다.
    }
}


Top