RTTI와 RAII

mingu Lee·2025년 11월 28일

CS

목록 보기
7/21

RTTI (Run-Time Type Information)와 RAII (Resource Acquisition Is Initialization)는 C++에서 사용되는 다른 목적을 가진 두 가지 개념이다.

RTTI (Run-Time Type Information)


RTTI는 실행 시간에 객체의 실제 자료형에 대한 정보를 파악할 수 있도록 하는 C++ 메커니즘이다.

일반적으로 클래스의 가상 함수 테이블(VTable)을 통해 접근 가능하기에 가상 함수를 가진 클래스에서만 동작한다.

  • 목적: 객체가 가리키는 실제 클래스가 무엇인지 프로그램 실행 중에 확인할 수 있도록 함
  • 주요 키워드/연산자:
    • dynamic_cast:
      주로 다형성 클래스 계층 구조에서 기본 클래스 포인터/참조를 파생 클래스 포인터/참조로 안전하게 다운캐스팅하는 데 사용됨
      캐스팅에 실패하면 포인터의 경우 nullptr을 반환하고 참조의 경우 std::bad_cast 예외를 throw
    • typeid: 주어진 표현식의 정확한 자료형에 해당하는 std:type_info 객체를 반환

RAII (Resource Acquisition Is Initialization)


RAII는 자원 관리를 위한 프로그래밍 기법으로, 자원의 수명 주기를 객체의 수명 주기에 묶는 방식이다.

  • 목적: 동적으로 할당된 메모리, 파일 Handle, Mutex Lock과 같은 시스템 자원이 누수되거나 이중 해제되는 것을 방지하고, 예외 발생 시에도 안전하게 해제되도록 보장
  • 작동 원리:
    • 자원 획득(Acquisition): 자원은 클래스의 생성자에서 획득(초기화)
    • 자원 해제(Release): 자원은 객체가 범위를 벗어나거나 명시적으로 삭제될 때 자동으로 호출되는 소멸자에서 해제
  • 예시 (RAII를 구현하는 표준 라이브러리 클래스):
    • std::unique_ptr / std::shared_ptr (메모리 관리)
    • std::lock_guard / std::unique_lock (뮤텍스 락 관리)
profile
Github: https://github.com/dlalsrn

0개의 댓글