unreal 5기

250910 언리얼엔진 본캠프 27일차 RAII

parkjinnam 2025. 9. 10. 12:23

RAII

RAII(Resource Acquisition Is Initialization)은 직역하자면 리소스 획득은 초기화 정도로 획득한 자원은 반드시 초기화해야 한다. 즉 무엇인가 기능이 아닌 설계 패턴 중 하나로서 이러한 행위들을 RAII라고 한다. 예컨대 malloc() 함수를 사용해서 동적할당을 했다고 생각하자. 프로그래머가 malloc() 함수를 사용하고 나서 수많은 코드를 작성한 후 이를 망각한 상태로 컴파일하면 free()를 통해서 할당받은 메모리를 풀어주지 않았기 때문에 메모리 누수가 발생한다. 혼자 진행하는 프로젝트라면 그럴 일이 잘 없겠지만 다수의 인원이 작업하는 프로젝트는 할당된 메모리의 소유가 누구 것인지 분명하게 파악하기 어렵다. 그렇기에 malloc() 등의 메모리 할당을 사용하면 코드를 작성하기 전에 버릇처럼 free()를 먼저 작성해 주고 대상 포인터가 nullptr인 것까지 확인해 준 다음 본 코드를 작성하는 습관을 들이는 것이 좋다.

 

물론 C++ 자체에서 기능적으로 RAII를 제공하기도 한다. unique_ptr, shared_ptr, lock_ground 등 이러한 애들은 함수가 끝나면 즉 스코프에서 벗어난다면 알아서 할당한 메모리를 헤제해준다. 그렇기에 RAII의 핵심은 프로그래머가 직접 자원을 획득하고 관리하는 것이 아닌 자원의 생성, 관리, 파괴 모두 객체에 위임하는 것이다.