[Unity] 캐스팅이 뭘까? - 유니티에서 활용하는 키워드 'as'

2024. 6. 19. 17:23· Develop/Unity
728x90

코드를 뜯어보다가 캐스팅이라는 말을 발견했다.

 

캐스팅은 쉽게말해 '형 변환'이다.

 

다만, 명확하지 않은 클래스로의 형변환이다.

 

유니티는 C#을 사용하고, C#에는 'as'라는 키워드가 존재한다.

 

as는 캐스팅을 위한 도구이다.

 

나는 싱글톤을 구현할 때 다음과 같이 구현했었다.

 

public class TestSingleton : Monobehavior{
	//test싱글톤
	private static TestSingleton _instance;
    public static TestSingleton Instance{
    	get{
        	if(_instance = null){
            	_instance = FindObjectOfType((typeof)TestSingleton)) as TestSingleton;
                
                return _instance
            }
        }
    }
}

무의식적으로 as 키워드를 사용하고 있었다...

 

as키워드를 사용한 코드는 _instance에 값을 초기화하고 있다. 

_instance가 null이기 때문에, TestSingleton을 찾아서 TestSingleton으로 캐스팅 해주는 작업을 하고 있었던것이다.

 

여기서 as의 특성이 하나 있는데 

as 는 캐스팅이 올바르지 않으면 null을 반환한다는것이다.

즉, 위의 작업에서 _instance가 TestSingleton으로 캐스팅되지 못한다면 그냥 null이 저장되는것이다.

 

캐스팅을 위한 as의 장점은 다음과 같다.

 

  • 안전성: as 키워드는 캐스팅이 실패할 경우 예외를 던지지 않으므로, 예외 처리 구문을 추가할 필요가 없습니다.
  • 명확성: 캐스팅의 결과가 null인 경우, 캐스팅이 실패했음을 쉽게 확인할 수 있습니다.
  • (from. ChatGPT)

그래서 as를 사용한 캐스팅을 한다.

 

추가로, 명시적인 캐스팅과, 암시적인 캐스팅이 존재한다.

 

명시적인 캐스팅은 다음과 같다.

object obj = new MyClass();
MyClass myClassInstance = (MyClass)obj;

 

 

명시적 캐스팅은 프로그래머가 직접 캐스팅을 지시하는 경우로, 타입 변환이 확실하게 안전하지 않은 상황에서 주로 사용된다. 예를 들어, 기본 클래스 타입을 구체적인 서브 클래스 타입으로 변환하는 위와 같은 경우가 존재한다.

 

위의 캐스팅에서는 object타입의 객체를 MyClass타입으로 명시적으로 캐스팅 하고 있다.

 

다음은 암시적인 캐스팅이다.

int number = 123;
double doubleNumber = number; // 암시적 캐스팅

한눈에 봐도 뭘 말하는지 이해가 된다.

 

암시적 캐스팅은 컴파일러가 자동으로 수행하는 캐스팅이다. 주로 상위 클래스에서 하위 클래스로의 캐스팅이나 작은 범위의 숫자 타입에서 큰 범위의 숫자 타입으로의 변환에서 사용된다.

 

즉, 컴파일러가 직접 캐스팅하는 경우는 암시적 캐스팅이라고 한다.

 

728x90
저작자표시

'Develop > Unity' 카테고리의 다른 글

[Unity] C#에서 사용하는 get,set연산자 정리 (=>를 활용한 표현식)  (0) 2024.06.20
[Unity] 갑자기 스크립트 리로딩이 안될때 - 스크립트 수정 후 유니티에서 리로딩을 안할때  (0) 2024.06.20
[Unity] 파이 그래프(원 그래프)를 만들어보자!  (0) 2024.06.13
[Unity] 마이크로 음성인식을 진행해보자!  (0) 2024.06.11
[Unity] '객체 지향 프로그래밍'이란 무엇인가 1(object-oriented programming)(OOP)  (3) 2024.05.07
'Develop/Unity' 카테고리의 다른 글
  • [Unity] C#에서 사용하는 get,set연산자 정리 (=>를 활용한 표현식)
  • [Unity] 갑자기 스크립트 리로딩이 안될때 - 스크립트 수정 후 유니티에서 리로딩을 안할때
  • [Unity] 파이 그래프(원 그래프)를 만들어보자!
  • [Unity] 마이크로 음성인식을 진행해보자!
LKM0222
LKM0222
Unity를 중점적으로 공부하는중입니다. 개인 깃허브 https://github.com/LKM0222 Nitros 소속
한량Unity를 중점적으로 공부하는중입니다. 개인 깃허브 https://github.com/LKM0222 Nitros 소속
250x250
LKM0222
한량
LKM0222

블로그 메뉴

  • 홈
  • 분류 전체보기 (120)
    • Develop (54)
      • Unity (24)
      • Firebase (4)
      • Dialogflow (3)
      • Dialog System (4)
      • 마음대로 만드는 게임 (16)
      • Imitation_MineCraft (2)
      • 아무도 볼 수 없는 보물창고 (0)
    • Study (64)
      • TCP_IP (2)
      • CodingTest (47)
      • 정보처리기사 (13)
      • Unreal Engine (1)
전체
오늘
어제
05-13 13:52

인기 글

태그

  • rkad

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
LKM0222
[Unity] 캐스팅이 뭘까? - 유니티에서 활용하는 키워드 'as'
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.