RAII 패턴

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 의 역활을 하기위해 이런 구조를 사용하는것이 좋다


댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다