RAII의 핵심 원리
RAII(Resource Acquisition Is Initialization)는 자원을 획득해야 하는 동적 메모리, 스레드, 소켓, 파일, 뮤텍스, 데이터베이스 연결 등을 객체의 생명주기에 직접 바인딩하는 C++ 프로그래밍 기법입니다. 생성자에서 자원을 획득하고 소멸자에서 해제하는 계약으로, 모든 자원이 생성 역순의 역순으로 해제됨을 보장합니다.
예외 안전성과 스택 언와인딩
RAII의 강력한 이점은 예외 발생 시에도 안전합니다. 예외 발생 시 C++은 스택을 언와인딩하면서 범위를 벗어나는 모든 객체의 소멸자를 역순으로 호출합니다. 따라서 조기 종료(early return)나 예외 발생 등 어떤 경로로든 함수를 빠져나가도 소멸자가 반드시 실행되어 자원 누수가 발생하지 않습니다.
표준 라이브러리의 RAII 구현
std::unique_ptr, std::shared_ptr은 동적 메모리를 관리하는 스마트 포인터이며, std::lock_guard, std::unique_lock은 뮤텍스를 안전하게 관리합니다. std::vector, std::string 등 표준 컨테이너도 RAII를 따르며, 명시적 정리 호출 없이도 자동으로 자원을 해제합니다.