캐스팅이란 변수나 객체의 타입을 강제적으로 변경하여 서로 다른 타입의 변수나 함수에 접근할 수 있도록 만들어주는 과정을 의미합니다. 상속 관계에서 캐스팅을 사용하면 상위 클래스에서 하위 클래스의 변수나 함수에 접근할 수 있으며, 특정 상황에서 타입을 변환해 분기 처리도 가능하게 합니다.
상속 관계에서 상위 클래스가 하위 클래스의 고유 변수나 함수에 접근하려는 경우
BP_Player
(상위 클래스)가 BP_Knight
(하위 클래스)의 Stamina
변수에 접근하려면 캐스팅이 필요합니다.객체 타입에 따른 분기 처리
BP_Player
중 BP_Knight
와 BP_Mage
를 각각 다르게 처리하고 싶을 때 사용.메모리 관리
하위 클래스 👉 상위 클래스 (Upcasting)
BP_Knight
객체를 BP_Player
타입 변수에 저장.BP_Player
의 변수와 함수는 접근 가능하지만, BP_Knight
의 고유 변수는 사용할 수 없습니다.BP_Player* Player = BP_Knight 객체;
상위 클래스 👉 하위 클래스 (Downcasting)
BP_Player
타입 객체를 BP_Knight
타입으로 캐스팅.BP_Player
객체가 BP_Knight
에서 생성된 객체여야 성공.Cast Failed
를 통해 처리.BP_Knight* Knight = Cast<BP_Knight>(Player);
캐스팅 실패
BP_Player
객체를 BP_Mage
로 캐스팅하려 했는데 실제로 BP_Knight
객체였다면 캐스팅 실패.BP_Player
가 부모 클래스, BP_Knight
와 BP_Mage
가 자식 클래스.BP_Player
타입 변수 Player
에 BP_Knight
객체가 저장되어 있다.Player
를 BP_Knight
타입으로 캐스팅하여 Stamina
변수에 접근.BP_Knight
의 변수 및 함수 사용 가능.하위 클래스 👉 상위 클래스 (Upcasting)
BP_Knight
객체를 BP_Player
로 다루면 Stamina
변수 사용 불가.상위 클래스 👉 하위 클래스 (Downcasting)
중복된 자식 클래스 간 캐스팅 제한
BP_Knight
객체를 BP_Mage
로 캐스팅하려 하면 실패.캐스팅 성공
BP_Knight
가 Attack
함수에서 근접 공격.캐스팅 실패
BP_Mage
로 캐스팅 실패 시 기본 동작 수행.BP_Player* Player;
if (BP_Knight* Knight = Cast<BP_Knight>(Player)) {
Knight->Stamina -= 10; // 캐스팅 성공 시 실행
} else {
// 캐스팅 실패 시 실행
PrintText("Cast Failed!");
}