카테고리 없음

🌟 C# is, as, 명시적 캐스팅 😋 🌟

minsoungdev 2026. 7. 28. 23:15

안녕하세요. 박민성입니다. 🤗

 

오늘은 C#에 is, as, 명시적 캐스팅에 대해서 글을 쓰고자 합니다. 🤔

이것 또한 그냥 겉핥기 식으로 알고 있었는데여 더 자세히 알아보기 위해서

이 주제를 토대로 글을 쓰고자 합니다.

 

1. 명시적 캐스팅

object val = "Hello";

string text = (string)val;

 

직접 대상 타입을 지정해서 변환하는 방식입니다.

실제 객체가 string이면 정상적으로 변환이 가능합니다.

 

하지만 실제 타입이 다르면 실행 중 예외가 발생합니다.

object val = 10;

string text = (string)val; // InvalidCastException

 

명시적 캐스팅은 해당 객체가 확실히 그 타입이라고 알고 있을 때이어야 사용할 수 있습니다.

 

2. as 연산자

string text = val as string;

as는 변환에 성공하면 변환된 참조를 반환하고 실패하면 예외 대신 null을 반환합니다.

object val = "Hello";

string text = val as string;

Console.WriteLine(text); // Hello

실패하는 경우에는

object val = 10;

string text = val as string;

Console.WriteLine(text == null); // true

요런식으로 null검사를 함께 사용합니다.

 

as는 일반적으로 참조 형식이나 nullable 값 형식에 사용합니다.

object value = 10;

// int number = value as int; // 컴파일 오류
int? number = value as int?;  // 가능

 

3. is 연산자

object val = "Hello";

bool result = val is string;

Console.WriteLine(result); // true

is는 객체가 특정 타입인지 확인해서 bool을 반환합니다.

 

if (val is string)
{
    string text = (string)val;
    Console.WriteLine(text.Length);
}

타입 확인 후 다시 캐스팅하는 방법도 있지만 

if (value is string text)
{
    Console.WriteLine(text.Length);
}

전에 배웠던 패턴 매칭을 사용해서 검사와 변수 생성을 동시에 할 수 있습니다.

 

4. 상속 관계에서도 사용 가능

public class Animal
{
}

public class Dog : Animal
{
    public void Bark()
    {
        Console.WriteLine("멍멍");
    }
}

Animal animal = new Dog();

변수의 선언 타입은 Animal이지만 실제 객체는 Dog입니다.

여기서

명시적 캐스팅은

Dog dog = (Dog)animal;
dog.Bark();

as는

Dog dog = animal as Dog;

if (dog != null)
{
    dog.Bark();
}

is는

if (animal is Dog dog)
{
    dog.Bark();
}

이런식으로 다 가능합니다. (하지만 이런 상황에서는 is가 가장 좋겠죠?)

 

5. is는 정확히 같은 타입만 확인할까요?

아닙니다. 해당 타입으로 호환 가능한지도 확인합니다.

Dog dog = new Dog();

Console.WriteLine(dog is Dog);    // true
Console.WriteLine(dog is Animal); // true
Console.WriteLine(dog is object); // true

Dog는 Animal을 상속하고 모든 타입은 object와 호환되므로 모두 true입니다.

이런식으로 is는 호환 가능한 타입들도 true를 반환합니다.

 

이상으로 C# is, as, 명시적 캐스팅에 대해서 알아보았는데요~!

유니티 개발하면서 추상클래스 사용할 때 많이 사용해봤는데여 이렇게 글을 작성해보면서 

또 리마인드도 되고 짜짤짜짤한 것들도 알게되었습니다. ☺️

오늘은 살짝.... ? 알찬 하루였습니다.

 

내일은 더욱 알차게 보내고 작성해보도록 하겠습니다. 

봐주셔서 감사합니다. ☺️