dynamic_cast
- 동적 캐스트(dynamic_cast)는 실행 중에 형변환을 판단한다.
- 포인터 또는 참조 형을 캐스팅할 때만 사용할 수 있다.
- 호환되지 않는 자식으로 캐스팅 하려고 하면 NULL을 반환한다.
- dynamic_cast가 static_cast보다 안전하다
// C style
Animal *myPet = new Cat();
Dog *myDog = (Dog *)myPet; // 컴파일 가능
myDog->getHouseName(); // 컴파일 되지만 Undefined Behavior
// C++ style
Animal *myPet = new Cat();
Dog *myDog = dynamic_cast<Dog *>(myPet); // 컴파일 되지만, NULL을 반환한다.
// 컴파일 되지만 실행되지 않는다.
if(myDog != NULL)
{
myDog->getHouseName();
}
주의점
- 그러나 이것을 사용하려면 RTTI(실시간 타입정보, Real-Time Type Information)를 켜야한다.
RTTI가 켜져 있지 않으면 dynamic_cast
는 static_cast
와 동일하게 작동한다.
보통 RTTI는 프로젝트에서 사용하지 않는다.
RTTI는 런타임 성능의 저하와 예외 처리에 영향을 미칠 수 있기 때문입니다.
dynamic_cast는 실무에서 많이 사용되지 않는 특성 중 하나이며, 주로 다른 설계 및 패턴을 사용하여 이러한 상황을 해결하는 것이 권장된다.
> 성능을 중요시하는 업계에서 C++를 사용하는 경우가 많을텐데, 성능을 저하시키는 기능을 구현할 필요는 없다.
'Language > C++' 카테고리의 다른 글
[C++] 30.Unmanaged Programming: static 키워드 (1) | 2024.01.31 |
---|---|
[C++] 29.Unmanaged Programming: 인라인 함수 (0) | 2024.01.31 |
[C++] 27.Unmanaged Programming: const_cast (1) | 2024.01.30 |
[C++] 26.Unmanaged Programming: reinterpret_cast (0) | 2024.01.30 |
[C++] 25.Unmanaged Programming: static_cast (0) | 2024.01.30 |