[C#] is & as

spixychz·2026년 2월 18일

Unity

목록 보기
12/15

오늘의 질문

C#에서 is, as, 그리고 명시적 캐스팅 (Type)obj의 차이점에 대해 설명하세요.


오늘의 대답

is는 객체가 특정 타입인지 검사하는 연산자이고,
as는 형 변환을 시도한 뒤 실패하면 null을 반환하는 안전한 캐스팅 연산자이며,
명시적 캐스팅 (Type)obj는 타입이 확실할 때 사용하는 직접 형 변환 방식으로, 실패 시 예외가 발생합니다.
즉, is는 타입 검사, as는 안전한 변환, 명시적 캐스팅은 확정적 변환입니다.


is

타입 검사 연산자

  • 객체가 특정 타입인지 확인
  • 결과를 bool (true/false) 로 반환
  • 값 타입, 참조 타입 모두 사용 가능

=> 타입을 확인만 하고 싶을 때 사용

if (unit is Player)
{
    // unit이 Player 타입이면 true
    ((Player)unit).Move();
}

패턴 매칭 (C# 7.0+)

  • C# 7.0 이후 패턴 매칭 지원
  • 타입 검사 + 변수 선언 한 번에 동시 수행
  • 캐스팅을 별도로 하지 않아도 됨
if (unit is Player player)
{
    // unit이 Player 타입이면 true, player 변수에 할당되어 즉시 사용 가능
    player.Move();
}

as

안전한 형 변환

  • 검사 + 변환을 동시에 수행
  • 변환 성공 시 해당 타입의 객체 반환, 실패 시 null 반환
  • null 체크 필요
  • 참조 타입에서만 사용 가능

=> 예외 없이 캐스팅하고 싶을 때 사용

Player player = unit as Player;

if (player != null)
{
    // 변환에 성공한 경우에만 로직 실행
    player.Move();
}
(unit as Player)?.Move();

명시적 캐스팅

직접 형 변환

  • (Type)obj 형태로 사용
  • 변환 실패 시 즉시 InvalidCastException 발생
  • 값 타입, 참조 타입 모두 사용 가능
  • 타입이 확실할 때 가장 단순한 방식

=> 타입이 100% 확실할 때 사용

((Player)unit).Move();

공통점

  • 런타임 타입 검사 수행
  • 다운캐스팅 상황에서 사용
  • is와 as는 잘못된 형 변환 시 예외 방지 목적, 명시적 형변환은 잘못 사용시 런타임 오류 가능

차이점

구분isas명시적 캐스팅
목적타입 검사안전한 형 변환직접 형 변환
반환값bool변환된 객체 또는 null변환된 객체
실패 시false 반환null 반환예외 발생
값 타입 사용가능불가능 (Nullable 제외)가능
안정성안전 (예외 없음)안전 (null 처리 필요)예외 발생 가능
권장 사용패턴 매칭제한적타입 확실 시

결론

  • 타입만 확인하고 싶다면 → is
  • 타입 검사 + 바로 사용하려면 → is 패턴 매칭
  • 예외 없이 안전하게 캐스팅하려면 → as
  • 타입이 확실하다면 → 명시적 캐스팅 (Type)obj

=> 가능하면 is 패턴 매칭을 사용하자.

profile
UNITY로 게임 개발하는 사람

0개의 댓글