최대 1 분 소요

RAII

C++진영에서 자주 쓰이는 Idiom으로 객체가 쓰이는 Scope를 벗어나면 자원을 해제해주는 기법

Resource Acquisition Is Initialization 자원의 획득은 초기화라는 뜻으로 다르게 말해서 객체와 자원의 라이프 사이클을 일치 시키라는 것이다.

무슨 말이냐면 자원을 얻을 때 초기화(Constructor)가 되어야 하며 객체가 사라질 때는 자원을 전부 반환(Destructor)해야 하며 객체가 유효하지 않은 상태 이게 만들어. 자원 생성, 파괴, 관리를 프로그래머가 아닌 객체에 위임하는 것을 의미한다.

RAII 쓰이는 이유

C++ 같은 Unmanaged 언어들을 다룰 때엔 메모리를 사용하는 각 변수들의 유효한 스코프를 파악 해야한다.그러나 다수의 프로그래머들이 참여하면 각 객체가 어디까지 메모리를 관리하는 지 불분명하기 때문에 메모리 누수가 일어날 수 있다. 이를 방지하고자 나온게 RAII이다.

RAII를 사용하면 다음과 같은 효과를 얻을 수 있다.

  • 쓰는 객체만 이용함으로 써 효과적인 메모리 관리
  • 메모리 관리를 객체 위임함으로 써 시간 효율 상승

string 및 vector는 RAII따르는 표준 라이브러리 클래스로서 동적 메모리는 초기화시 획득하고, 파괴 시 자동으로 정리된다.

RAII 주의사항

  • new를 이용한 생성은 자제하자.
    • 사용자에게 권한이 주어지기 때문에 RAII와 맞지않다.
  • 생성 후 뒷 처리하지 말기
    • RAII는 생성 후 망각이라는 원칙이 있다. 소유권이 넘어간 객체가 처리하게 한다.

사용 예시

  • 로깅
  • 코드블럭이 실행되는 시간 재기
  • synchorized 영역 만들기

태그: ,

카테고리:

업데이트:

댓글남기기