형식은 매우 많고, 사용자가 직접 만들 수 있다. 이러한 형식들은 중에는 다른 형식을 포함한다.
우리가 사용하고자 하는 형식을 통하여 다른 형식을 가져오거나, 가지고 있는 형식으로 다운 캐스팅을 하는 경우도 있다. 개발을 하면서 유지와 보수가 용이하게 하기 위하여, 상속에서 부모가 되는 형식을 통해서 다운 캐스팅을 해줄 수 있다. 이러한 작업에서 오류를 방지하기 위해서 우리는 형식을 테스트 해볼 수 있다.
캐스팅이란?
- 캐스팅은 형식을 다른 형식으로 변환해 주는 작업을 의미한다.
- 형식과 캐스팅 하려는 형식이 공통으로 가지는 상속 관계 또는 인터페이스가 성립해야만 한다.
is와 as
is와 as는 객체를 캐스팅 하는데 사용된다.
is
- 형식이 캐스팅 하려는 형식으로 캐스팅이 가능한지 bool 값으로 반환해준다.
using UnityEngine; public class Test : MonoBehaviour { public class TestParent { } public class TestChild : TestParent { public void Log() { Debug.Log("TestChild"); } } private void Start() { TestParent testParent = new(); TestChild testChild = new(); Debug.Log(testChild is TestParent); Debug.Log(testParent is TestChild); } }//실행 결과 : 첫 번째 log는 자식을 부모로 캐스팅하는 것으로 true, 두 번쨰 log는 부모를 자식으로 캐스팅하는 것으로 false가 출력된다.
as
- 형식이 캐스팅 하려는 형식으로 캐스팅이 가능한 경우, 캐스팅 된 형식을 반환한다.
- 캐스팅의 결과는 실제로 사용 가능한 값이 아니다.
- 캐스팅 된 형식의 변수와 메서드를 사용할 수 있다.
using UnityEngine; public class Test : MonoBehaviour { public class TestParent { } public class TestChild : TestParent { public void Log() { Debug.Log("TestChild"); } } private void Start() { TestParent testParent = new TestChild(); (testParent as TestChild).Log(); } }//실행 결과 : TestChild라는 로그가 출력된다. - 캐스팅이 불가능한 경우에는 null 값을 반환한다.
- 캐스팅 하려는 형식이 Nullable이 아니라면, 캐스팅은 오류가 발생한다.
주의점
- 위에 나온 내용처럼 as는 캐스팅에 성공했을 때의 값이 실제로 사용 가능한 값이 아니다, 이유는 as는 캐스팅한 형식으로 사용 가능하게 해주는 것이다. as의 대상이 되는 변수의 형식은 캐스팅 이후에도 변함없다.
using UnityEngine; public class Test : MonoBehaviour { public class TestParent { } public class TestChild : TestParent { } private void Start() { TestChild testChild = new(); Debug.Log(testChild as TestParent); } }//실행 결과 : testChild의 형식이 변함 없으므로, TestChild가 출력된다.
'유니티 > 개념 정리' 카테고리의 다른 글
| IInputActionCollection (0) | 2024.09.02 |
|---|---|
| Task (0) | 2024.08.23 |
| SOLID 원칙 (0) | 2024.08.09 |
| Exception(예외 처리) (0) | 2024.08.07 |
| ref와 out (0) | 2024.08.02 |