C#에서
is,as, 그리고 명시적 캐스팅(Type)obj의 차이점에 대해 설명하세요.
is는 객체가 특정 타입인지 검사하는 연산자이고,
as는 형 변환을 시도한 뒤 실패하면null을 반환하는 안전한 캐스팅 연산자이며,
명시적 캐스팅(Type)obj는 타입이 확실할 때 사용하는 직접 형 변환 방식으로, 실패 시 예외가 발생합니다.
즉,is는 타입 검사,as는 안전한 변환, 명시적 캐스팅은 확정적 변환입니다.
=> 타입을 확인만 하고 싶을 때 사용
if (unit is Player)
{
// unit이 Player 타입이면 true
((Player)unit).Move();
}
if (unit is Player player)
{
// unit이 Player 타입이면 true, player 변수에 할당되어 즉시 사용 가능
player.Move();
}
=> 예외 없이 캐스팅하고 싶을 때 사용
Player player = unit as Player;
if (player != null)
{
// 변환에 성공한 경우에만 로직 실행
player.Move();
}
(unit as Player)?.Move();
(Type)obj 형태로 사용InvalidCastException 발생=> 타입이 100% 확실할 때 사용
((Player)unit).Move();
| 구분 | is | as | 명시적 캐스팅 |
|---|---|---|---|
| 목적 | 타입 검사 | 안전한 형 변환 | 직접 형 변환 |
| 반환값 | bool | 변환된 객체 또는 null | 변환된 객체 |
| 실패 시 | false 반환 | null 반환 | 예외 발생 |
| 값 타입 사용 | 가능 | 불가능 (Nullable 제외) | 가능 |
| 안정성 | 안전 (예외 없음) | 안전 (null 처리 필요) | 예외 발생 가능 |
| 권장 사용 | 패턴 매칭 | 제한적 | 타입 확실 시 |
isis 패턴 매칭as(Type)obj=> 가능하면 is 패턴 매칭을 사용하자.