C++

[C++] 캐스트 연산자/RTTI

programmer-faust 2025. 9. 3. 04:32
  • 순서
    1. 캐스트 연산자란?
    2. 캐스트 연산자의 종류
    3. RTTI란?
    4. RTTI의 동작 조건
    5. RTTI의 장점과 단점
  • 캐스트 연산자란?
    1. 데이터 타입을 다른 데이터 타입으로 명시적으로 변환하는 데 사용되는 특수 연산자.
    2. 런타임 시 변수의 타입을 강제로 바꾸거나, 컴파일러게 명확한 의도를 전달하여 타입 변환을 수행하는 역할
    3. 타입을 바꾸는 것 이상으로 타입 안전성과 목적에 맞는 변환을 명시적으로 제어할 수 있게 설계된 연산자.
  • 캐스트 연산자의 종류
    1. static_cast<T>
      • 정적 타입 변환 연산자로 컴파일 타임에 타임 검사를 수행함.
      • 타입 변환이 명확하고 안전할 때 사용함.
      • 기본형 변환, 상속 관계에서 업캐스트/다운캐스트, 포인터 > 정수 변환 등에 상용됨
      • 안전성이 비교적 높지만 다운캐스트 시 런타임 체크는 없음
    2. dynamic_cast<T>
      • 런타임 타입을 안전한 다운 캐스트할 때 사용함
      • RTTI가 필요하며 안전하게 상속 계층에서 다운캐스트 가능함. 실패 시 포인터는 nullptr, 참조는 예외 발생
      • 반드시 하나 이상의 virtual 함수가 있어야 RTTI가 지원됨
    3. const_cast<T>
      • 상수성 제거/추가할 때 사용하는 캐스트타입
      • const 또는 volatile속성을 제거하거나 추가함.
      • 데이터 자체를 변환하지 않으며, 단지 읽기/쓰기 권한만 변경함
    4. reinerpret_cast<T>
      • 비트 수준의 변환을 할 때 사용함
      • 메모리상의 비트 표현을 그대로 다른 타입으로 해석함
      • 매움 위험하며 포인터, 정수, 함수 포인터 등 변환 가능하며, 런타임 안전성이 없음.
  • RTTI란?
    1. C++은 정작 타입 언어로 컴파일 시 대부분의 타입이 결정되기 때문에 런타임 타입 확인기능을 제공하는 매커니즘임.
    2. dynamic_cast와 typeid연산자에서 대표적으로 사용함.
  •  RTTI의 동작 조건
    1. 클래스에서 최소 하나의 virtual 함수가 있어야 제공됨 => RTTI는 가상 함수 테이블에 타입 정보를 포함시키는 방식으로 구현되기 때문임
    2. 런타임에 타입 정보를 확인: 컴파일 시에는 불가능 > 포인터/참조가 실제 어떤 파생 객체를 가리키는지 런타임에서 체크
  • RTTI의 장점과 단점
    1. 장점
      • 런타임 다운캐스트를 안전하게 수행 가능(dynamic_cast)
      • 타입을 확인하고 분기 처리 가능(typeid)
      • 다형성 기반 설계에서 유연하게 객체를 처리 가능
    2. 단점
      • 오버헤드: 가상 함수 테이블에 타입 정보를 추가 > 약간의 메모리와 성능 비용
      • 가상 함수 필요: 가상 함수가 없는 클래스에서는 RTTI 기능 제한

'C++' 카테고리의 다른 글

[C++]const 키워드  (0) 2025.09.03
[C++]static 키워드  (0) 2025.09.03
[C++] malloc/free와 new/delete  (0) 2025.09.03
[C++]동적할당과 깊은/얕은 복사  (0) 2025.09.03
[C++]포인터와 레퍼런스  (0) 2025.09.02