RAII : Resource Acquisition Is Initialization
자원획득 은 초기화
직역하면 이상한데 이 패턴의 목적은 사실 획득에 있다기보다
획득한 자원은 초기화 한다 라고 해석 하는게 이해하기 쉽다
흔히 고장나 페기된 auto_ptr 같은 스마트 포인터가 이 패턴에 해당하고
COM/ATL 에서 사용되던 ComPtr 등
class raii{ raii(){ onHeap = new int(); } virtual ~onHeap(){ delete onHeap; } int* onHeap; }
그리고 현대에와서 모던 c++ 에 사용된 std::mutax 와 함게 사용되는 lock_guard 관련 패턴이 이런 방식으로 동작한다
{ std::lock_guard<std::mutex> locker(mutaxInstance); //--- do something }
스택의 instance 는 destructor 가 무조건 호출된다 는 보장을 주요점으로
stack 에 선언한 개체의 소멸시점에 해당 개체의 자원은 정리하거나 마무리 하는 동작을 하게 한다
위의 경우엔 포인터를 선언한것에 대한 힙 메모리 정리(delete) 를 혹은 mutax lock 에 대한 unlock 을
자연스럽게 보이지 않게 처리 하고 scope 를 탈출한다
심플 예제 이상해보여도 어쩔수 없다
raii 라는 이름을 못들어봣다 해도 아마 나도모르게 쓰거나 얻어 쓰거나 보고 쓰거나 했을 패턴이다
자원에 대한 해제 뿐 아니라 소멸시 정리해주거나 처리해줄 내용들에 대해서 얼마든지 사용할 수 있는 패턴이라고 생각 한다
C++ 창시자 비야네 스트롭스트룹이 제안 한 내용이며
다른 언어에서의 finaly 의 역활을 하기위해 이런 구조를 사용하는것이 좋다
댓글 남기기