-
as 또는 is를 이용한 형 변환 (Type conversion using as or is)카테고리 없음 2021. 10. 21. 17:17
상속을 이용하여 코드를 작성하다 보면 기반 클래스로 생성을 하고 하위 클래스의 속성을 가져와 생성하거나 반대로 하위 클래스를 기반 클래스처럼 사용할때가 있습니다. 이런식으로 코드를 작성하다보면 기반 클래스와 하위 클래스간에 속성변환이 필요할때가 있는데, 이를 위해서 C#에서는 is와 as 연산자를 제공합니다.
*기반 클래스에서 하위 클래스로 캐스팅 되는것을 다운캐스팅, 하위 클래스에서 기반 클래스로 캐스팅 되는것을 업캐스팅이라고 합니다.
1. is 형 변환
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051public class Monster : MonoBehaviour{public virtual void Attack(){print("공격받습니다.");}public virtual void Die(){print("몬스터가 죽었습니다.");}}public class Slime : Monster{public override void Attack(){base.Attack();print("공격하는 몬스터는 슬라임 입니다.");}public override void Die(){print("슬라임이 죽었습니다.");}}public class Player{public void KillMonster(Monster monster){monster.Attack();monster.Die();}}public class Test : MonoBehaviour{private void Start(){Player player = new Player();Monster monster = new Slime();if(monster is Slime){print(monster is Slime);player.KillMonster(monster);}}}cs is 형 변환 예시 코드
위의 코드에선 Monster라는 기반 클래스를 상속받는 Slime을 is로 검사하여 형 변환이 가능하면 true, 불가하면 false를 반환합니다. 이를 이용해 if ( A (대상) is B (타입) ) 을 사용해 A를 B 타입인지 확인할수 있습니다.
2. as 형 변환
1234567891011121314public class Test : MonoBehaviour{private void Start(){Player player = new Player();Monster monster = new Slime();monster = monster as Slime;if (monster != null){player.KillMonster(monster);}}}cs as 형 변환 예시 코드
as로 형 변환 했을때는 monster가 Slime 형태가 맞으면 그대로 변환을 받고 아닐경우 null을 리턴합니다. 그러므로 as로 형변환을 했을때는 null 인지 확인하여 코드를 작성합니다. A(대상) as B(타입) 으로 A가 B 타입인지 검사하여 맞으면 A를 반환, 아니면 B를 반환하는 형 변환 형태입니다.