본문 바로가기
C#

C#의 is 와 as 키워드 (#01)

by Oz Driver 2025. 6. 26.

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을 반환합니다.

• 무조건 변환이 될 것이라면 (타입) 캐스팅이 더 간단하지만, 실패 시 예외가 발생하니 주의해야 합니다.