C# 에서는 객체가 어떤 타입인지 확인하거나, 타입 변환을 안전하게 수행할 때 is 와 as 키워드를 자주 사용합니다. 이 둘은 형변환과 타입 검사를 보다 깔끔하게 처리하기 위한 문법입니다.
is 키워드 : 타입인지 확인만 하고 싶을 때
is는 객체가 특정 타입인지 확인하는 데 사용합니다. true 또는 false를 반환합니다.
object obj = "Hello";
if (obj is string)
{
Console.WriteLine("obj는 string입니다.");
}
C# 7.0 이상에서는 아래처럼 패턴 매칭과 함께 변수를 선언하며 사용할 수 있습니다.
if (obj is string s)
{
// s는 string으로 자동 변환됨
Console.WriteLine(s.ToUpper());
}
as 키워드 : 변환을 시도하되 실패해도 예외 없이 null 반환
as는 형변환을 시도하지만, 실패 시 예외를 발생시키지 않고 null을 반환합니다. 주로 참조 타입에 사용됩니다.
object obj = "Hello";
string? s = obj as string;
if (s != null)
{
Console.WriteLine(s.Length);
}
만약 형변환이 불가능한 타입이라면?
// int는 string과 호환되지 않음
object obj = 123;
// s는 null이 됨
string? s = obj as string;
if (s != null)
{
// 실행되지 않음
Console.WriteLine(s.Length);
}
is 와 as 그리고 type casting
object obj = "Hello";
// 타입 확인만하고자 할 때 : is
if (obj is string)
{
...
}
// (string) 강제 캐스팅
string s = (string)obj; // 실패 시 예외 발생
// 변환을 시도하고 결과를 사용해야 할 때 : as
string? s2 = obj as string; // 실패 시 null
• 값 타입(Value Type) 에는 as 를 사용할 수 없습니다.
• as는 참조형 타입에만 사용 가능합니다. int, bool 같은 값 타입은 사용 불가입니다.
object obj = 42;
// 이렇게는 가능 (nullable로 처리한 경우)
int? num = obj as int?;
정리
• is는 타입인지 확인만 합니다.
• as는 타입 변환을 시도하되 실패 시 null을 반환합니다.
• 무조건 변환이 될 것이라면 (타입) 캐스팅이 더 간단하지만, 실패 시 예외가 발생하니 주의해야 합니다.
'C#' 카테고리의 다른 글
C# 의 Interface 기초부터 활용까지 (0) | 2025.06.26 |
---|---|
C#의 is 와 as 키워드 (#02) (0) | 2025.06.26 |
C# 의 상속이 C++ 과 다른 점 (0) | 2025.06.25 |
=> 에 대한 진실과 오해 : 이것은 람다일까 아닐까? (0) | 2025.06.23 |
C# 다형성(Polymorphism) 정리 (0) | 2025.06.23 |