캐스팅이란 변수나 객체의 타입을 강제적으로 변경하여 서로 다른 타입의 변수나 함수에 접근할 수 있도록 만들어주는 과정을 의미합니다. 상속 관계에서 캐스팅을 사용하면 상위 클래스에서 하위 클래스의 변수나 함수에 접근할 수 있으며, 특정 상황에서 타입을 변환해 분기 처리도 가능하게 합니다.
상속 관계에서 상위 클래스가 하위 클래스의 고유 변수나 함수에 접근하려는 경우
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!");
}